Skip to content

Commit

Permalink
implementing of deeplinking to enable sharing user backup with others #4
Browse files Browse the repository at this point in the history
.
  • Loading branch information
Kosh committed Oct 30, 2016
1 parent 4219d84 commit 6b639ab
Show file tree
Hide file tree
Showing 22 changed files with 266 additions and 40 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
/app/google-services.json
/.idea/
/app/StyleMe
/app/src/main/res/values/secrets.xml
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ android {
targetSdkVersion 25
versionCode 100
versionName "10.0.0"
buildConfigField "String", "FA_HOST", '"k0shk0sh.github.io/FastAccess"'
buildConfigField "String", "SHARED_URI", '"sharedUri"'
signingConfig signingConfigs.signing
}
buildTypes {
Expand Down Expand Up @@ -74,6 +76,7 @@ dependencies {
compile "com.google.firebase:firebase-auth:${firebase}"
compile "com.google.android.gms:play-services-auth:${firebase}"
compile "com.google.firebase:firebase-crash:${firebase}"
compile "com.google.firebase:firebase-invites:${firebase}"
compile 'com.jakewharton:butterknife:8.4.0'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'frankiesardo:icepick:3.1.0'
Expand All @@ -86,6 +89,7 @@ dependencies {
compile 'org.adw.library:discrete-seekbar:1.0.1'
compile 'com.theartofdev.edmodo:android-image-cropper:2.3.1'
compile 'pub.devrel:easypermissions:0.2.1'
compile 'com.github.iammert:MaterialIntroView:1.5.2'
apt 'frankiesardo:icepick-processor:3.1.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}
Expand Down
16 changes: 16 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,22 @@

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>

<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>

<data
android:host="k0shk0sh.github.io/FastAccess"
android:pathPattern=".*"
android:scheme="http"/>
<data
android:host="k0shk0sh.github.io/FastAccess"
android:pathPattern=".*"
android:scheme="https"/>
</intent-filter>

<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/fa_shortcuts"/>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/fastaccess/data/dao/AppsModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ public static Comparator<AppsModel> sortApps() {
dest.writeString(this.activityInfoName);
dest.writeInt(this.indexPosition);
dest.writeInt(this.countEntry);
dest.writeLong(this.getId());
dest.writeValue(this.getId());
}

protected AppsModel(Parcel in) {
Expand Down
47 changes: 47 additions & 0 deletions app/src/main/java/com/fastaccess/helper/ViewHelper.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.fastaccess.helper;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
Expand All @@ -16,6 +17,7 @@
import android.graphics.drawable.shapes.RoundRectShape;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.design.widget.NavigationView;
import android.support.v4.content.ContextCompat;
Expand All @@ -33,6 +35,11 @@

import java.util.Arrays;

import co.mobiwise.materialintro.animation.MaterialIntroListener;
import co.mobiwise.materialintro.shape.Focus;
import co.mobiwise.materialintro.shape.FocusGravity;
import co.mobiwise.materialintro.view.MaterialIntroView;


/**
* Created by kosh20111 on 10/7/2015 10:42 PM
Expand Down Expand Up @@ -151,6 +158,45 @@ public static void showTooltip(@NonNull final View view, @StringRes int titleRes
showTooltip(view, titleResId, tag, Gravity.BOTTOM);
}

public static void showMaterialIntroView(@NonNull Context context, @NonNull View view, @StringRes int resId,
boolean showAnimation, @Nullable MaterialIntroListener listener) {
Activity activity = ActivityHelper.getActivity(context);
if (activity == null) {
activity = ActivityHelper.getActivity(view.getContext());
if (activity == null) {
showTooltip(view, resId, String.valueOf(resId));
return;
}
}
new MaterialIntroView.Builder(activity)
.enableDotAnimation(showAnimation)
.enableIcon(true)
.setFocusGravity(FocusGravity.CENTER)
.setFocusType(Focus.MINIMUM)
.setDelayMillis(1500)
.enableFadeAnimation(true)
.setInfoText(activity.getResources().getString(resId))
.performClick(true)
.setTarget(view)
.setListener(listener)
.setUsageId(view.getId() != 0 ? String.valueOf(view.getId()) : String.valueOf(resId))
.show();
}

public static void showMaterialIntroView(@NonNull Context context, @NonNull View view, @StringRes int resId,
@Nullable MaterialIntroListener listener) {
showMaterialIntroView(context, view, resId, false, listener);

}

public static void showMaterialIntroView(@NonNull Context context, @NonNull View view, @StringRes int resId, boolean showAnimation) {
showMaterialIntroView(context, view, resId, showAnimation, null);
}

public static void showMaterialIntroView(@NonNull Context context, @NonNull View view, @StringRes int resId) {
showMaterialIntroView(context, view, resId, null);
}

public static Rect getLayoutPosition(@NonNull View view) {
Rect myViewRect = new Rect();
view.getGlobalVisibleRect(myViewRect);
Expand All @@ -166,4 +212,5 @@ public static int getWidthFromRecyclerView(@NonNull RecyclerView recyclerView, @
windowManager.getDefaultDisplay().getMetrics(metrics);
return width <= metrics.widthPixels ? width : metrics.widthPixels;
}

}
13 changes: 3 additions & 10 deletions app/src/main/java/com/fastaccess/ui/base/BaseActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
Expand All @@ -14,7 +15,6 @@
import com.fastaccess.BuildConfig;
import com.fastaccess.R;
import com.fastaccess.helper.AppHelper;
import com.fastaccess.helper.ViewHelper;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import com.fastaccess.ui.widgets.dialog.MessageDialogView;

Expand Down Expand Up @@ -55,11 +55,6 @@ public abstract class BaseActivity<V, P extends BasePresenter<V>> extends AppCom
Icepick.restoreInstanceState(this, savedInstanceState);
}
setupToolbarAndStatusBar();
// if (PermissionHelper.declinedPermissions(this.getApplicationContext(), PermissionActivity.PERMISSIONS).length != 0) {
// startActivity(new Intent(this, PermissionActivity.class));
// finish();
// return;
// }
}

@Override public boolean onOptionsItemSelected(MenuItem item) {
Expand Down Expand Up @@ -115,12 +110,10 @@ protected void setToolbarIcon(@DrawableRes int res) {
}
}

@RequiresApi(value = 21) private void changeAppColor() {
@RequiresApi(value = 21) protected void changeAppColor() {
if (AppHelper.isLollipopOrHigher()) {
if (!isTransparent()) {
getWindow().setStatusBarColor(ViewHelper.getPrimaryDarkColor(this));
} else {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.primary_dark));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,16 @@ public static DeviceAppsPresenter with(@NonNull DeviceAppsMvp.View view) {
}

@Override public void onItemClick(int position, View v, AppsModel item) {
if (getView().hasSelection()) {
onItemLongClick(position, v, item);
} else {
getView().onOpenAppDetails(v, item);
}
getView().setSelection(item.getComponentName().toShortString(), position);
// if (getView().hasSelection()) {
// onItemLongClick(position, v, item);
// } else {
// getView().onOpenAppDetails(v, item);
// }
}

@Override public void onItemLongClick(int position, View v, AppsModel item) {
getView().setSelection(item.getComponentName().toShortString(), position);
onItemClick(position, v, item);
}

@Override public boolean onCreateActionMode(ActionMode mode, Menu menu) {
Expand All @@ -67,7 +68,7 @@ public static DeviceAppsPresenter with(@NonNull DeviceAppsMvp.View view) {
}

@Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
return true;
}

@Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import com.fastaccess.data.dao.FolderModel;
import com.fastaccess.ui.modules.apps.folders.create.CreateFolderMvp;
import com.fastaccess.ui.widgets.dialog.MessageDialogView;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;

import java.util.List;
Expand All @@ -16,7 +17,7 @@

public interface FoldersMvp {

interface View extends CreateFolderMvp.OnNotifyFoldersAdapter {
interface View extends CreateFolderMvp.OnNotifyFoldersAdapter, MessageDialogView.MessageDialogViewActionCallback{
void onStartLoading();

void onFoldersLoaded(@Nullable List<FolderModel> models);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.fastaccess.ui.modules.apps.folders.create.CreateFolderView;
import com.fastaccess.ui.modules.apps.folders.select.SelectFolderAppsView;
import com.fastaccess.ui.widgets.FontTextView;
import com.fastaccess.ui.widgets.dialog.MessageDialogView;
import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView;
import com.mikhaellopez.circularfillableloaders.CircularFillableLoaders;

Expand Down Expand Up @@ -106,9 +107,8 @@ public static FoldersView newInstance() {
}

@Override public void onDeleteFolder(@NonNull FolderModel folder, int position) {
FolderModel.deleteFolder(folder);
adapter.removeItem(position);
onNotifyChanges();
MessageDialogView.newInstance(R.string.delete, R.string.delete_folder_confirm_msg, position)
.show(getChildFragmentManager(), "MessageDialogView");
}

@Override public void onFilter(@Nullable String text) {
Expand All @@ -127,6 +127,19 @@ public static FoldersView newInstance() {
EventBus.getDefault().post(new FolderEventModel());
}

@Override public void onMessageDialogActionClicked(boolean isOk, int requestCode) {
if (isOk) {
FolderModel folderModel = adapter.getItem(requestCode);
if (folderModel != null) {
FolderModel.deleteFolder(folderModel);
adapter.removeItem(folderModel);
onNotifyChanges();
}
}
}

@Override public void onDialogDismissed() {}//opt-out

@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(@NonNull FragmentFolderEventModel model) {
if (loader != null) loader.forceLoad();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@ interface View {

interface Presenter extends ValueEventListener {

void onRestore(DatabaseReference databaseReference);
void onRestore(@NonNull DatabaseReference databaseReference, @Nullable String userId);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.fastaccess.ui.modules.cloud.restore;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import com.fastaccess.R;
import com.fastaccess.data.dao.BackupRestoreModel;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.Logger;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import com.fastaccess.ui.modules.cloud.backup.BackupView;
Expand All @@ -18,6 +20,7 @@
*/

public class RestorePresenter extends BasePresenter<RestoreMvp.View> implements RestoreMvp.Presenter {
private String userId;

protected RestorePresenter(@NonNull RestoreMvp.View view) {
super(view);
Expand All @@ -27,16 +30,20 @@ public static RestorePresenter with(@NonNull RestoreMvp.View view) {
return new RestorePresenter(view);
}

@Override public void onRestore(DatabaseReference databaseReference) {
@Override public void onRestore(@NonNull DatabaseReference databaseReference, @Nullable String userId) {
this.userId = userId;
FirebaseUser user = getView().user();
if (user == null) {
if (InputHelper.isEmpty(userId)) {
if (user != null) userId = user.getUid();
}
if (InputHelper.isEmpty(userId)) {
getView().onShowMessage(R.string.login_first_msg);
getView().finishOnError();
} else {
getView().onShowProgress();
Logger.e(user.getUid());
Query query = databaseReference
.child(BackupView.BACKUP_DATABASE_NAME)
.child(user.getUid())
.child(userId)
.limitToFirst(1);
query.keepSynced(true);
query.addListenerForSingleValueEvent(this);
Expand All @@ -48,7 +55,10 @@ public static RestorePresenter with(@NonNull RestoreMvp.View view) {
if (dataSnapshot != null) {
Logger.e(dataSnapshot);
FirebaseUser user = getView().user();
if (user == null) {
if (InputHelper.isEmpty(userId)) {
if (user != null) userId = user.getUid();
}
if (userId == null) {
getView().onHideProgress();
getView().onShowMessage(R.string.login_first_msg);
getView().finishOnError();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,20 @@
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import icepick.State;

/**
* Created by Kosh on 23 Oct 2016, 9:05 PM
*/

public class RestoreView extends BaseActivity<RestoreMvp.View, RestorePresenter> implements RestoreMvp.View {

public static final String USER_ID_INTENT = "user_id";
private RestorePresenter presenter;
private ProgressDialog progressDialog;
private DatabaseReference database;
private FirebaseUser user;
@State String userId;

@Override protected int layout() {
return 0;
Expand Down Expand Up @@ -77,12 +82,15 @@ public class RestoreView extends BaseActivity<RestoreMvp.View, RestorePresenter>

@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPresenter().onRestore(getDatabase());
if (savedInstanceState == null && getIntent() != null && getIntent().getExtras() != null) {
userId = getIntent().getExtras().getString(USER_ID_INTENT);
}
getPresenter().onRestore(getDatabase(), userId);
}

@Override protected void onStop() {
super.onStop();
try {
try {// user might cancel if we never registered the listener
getDatabase().removeEventListener(getPresenter());
} catch (Exception ignored) {}
}
Expand Down
Loading

0 comments on commit 6b639ab

Please sign in to comment.