From 723c7a7ff0fe850f1350e3372e28f1b8df1591fc Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 19 Sep 2018 16:41:01 +0800 Subject: [PATCH] fix(ui): some bugs on back pressed --- .../foreground/ForegroundService.java | 52 +++++++++++++++---- .../autojs/autojs/ui/doc/DocsFragment.java | 11 ---- .../autojs/autojs/ui/main/MainActivity.java | 8 +++ .../autojs/ui/main/ViewPagerFragment.java | 5 +- .../ui/main/community/CommunityFragment.java | 11 ---- .../autojs/ui/main/drawer/DrawerFragment.java | 6 +-- .../autojs/ui/main/sample/MarketFragment.java | 1 - .../ui/main/scripts/MyScriptListFragment.java | 18 +------ .../ui/main/task/TaskManagerFragment.java | 5 ++ .../core/ui/dialog/BlockedMaterialDialog.java | 2 +- 10 files changed, 63 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/org/autojs/autojs/external/foreground/ForegroundService.java b/app/src/main/java/org/autojs/autojs/external/foreground/ForegroundService.java index 563f2e8b..e9108beb 100644 --- a/app/src/main/java/org/autojs/autojs/external/foreground/ForegroundService.java +++ b/app/src/main/java/org/autojs/autojs/external/foreground/ForegroundService.java @@ -3,6 +3,7 @@ package org.autojs.autojs.external.foreground; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; +import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; @@ -12,11 +13,34 @@ import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.v4.app.NotificationCompat; +import com.stardust.app.GlobalAppContext; + import org.autojs.autojs.R; +import org.autojs.autojs.ui.main.MainActivity_; public class ForegroundService extends Service { - private static final int NOTIFICATION_ID = 117; - private static final String CHANEL_ID = "foreground"; + + + private static final int NOTIFICATION_ID = 1; + private static final String CHANEL_ID = ForegroundService.class.getName() + ".foreground"; + + public static void start(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + context.startForegroundService(new Intent(context, ForegroundService.class)); + } else { + context.startService(new Intent(context, ForegroundService.class)); + } + } + + public static void stop(Context context){ + context.stopService(new Intent(context, ForegroundService.class)); + } + + @Override + public void onCreate() { + super.onCreate(); + startForeground(); + } @Nullable @Override @@ -24,13 +48,7 @@ public class ForegroundService extends Service { return null; } - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - startForeground(); - return START_STICKY; - } - - private void startForeground(){ + private void startForeground() { startForeground(NOTIFICATION_ID, buildNotification()); } @@ -38,21 +56,33 @@ public class ForegroundService extends Service { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { createNotificationChannel(); } + PendingIntent contentIntent = PendingIntent.getActivity(this, 0, MainActivity_.intent(this).get(), 0); return new NotificationCompat.Builder(this, CHANEL_ID) .setContentTitle(getString(R.string.foreground_notification_title)) .setContentText(getString(R.string.foreground_notification_text)) .setSmallIcon(R.drawable.autojs_material) + .setWhen(System.currentTimeMillis()) + .setContentIntent(contentIntent) + .setChannelId(CHANEL_ID) .build(); } @RequiresApi(api = Build.VERSION_CODES.O) - private void createNotificationChannel(){ + private void createNotificationChannel() { NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); assert manager != null; CharSequence name = getString(R.string.foreground_notification_channel_name); String description = getString(R.string.foreground_notification_channel_name); - NotificationChannel channel = new NotificationChannel(CHANEL_ID, name, NotificationManager.IMPORTANCE_HIGH); + NotificationChannel channel = new NotificationChannel(CHANEL_ID, name, NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription(description); + channel.enableLights(false); manager.createNotificationChannel(channel); } + + @Override + public void onDestroy() { + stopForeground(true); + super.onDestroy(); + + } } diff --git a/app/src/main/java/org/autojs/autojs/ui/doc/DocsFragment.java b/app/src/main/java/org/autojs/autojs/ui/doc/DocsFragment.java index 3ddfbda7..86914a6c 100644 --- a/app/src/main/java/org/autojs/autojs/ui/doc/DocsFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/doc/DocsFragment.java @@ -74,23 +74,12 @@ public class DocsFragment extends ViewPagerFragment implements BackPressedHandle } - @Override - public void onResume() { - super.onResume(); - ((BackPressedHandler.HostActivity) getActivity()) - .getBackPressedObserver() - .registerHandlerAtFront(this); - } - @Override public void onPause() { super.onPause(); Bundle savedWebViewState = new Bundle(); mWebView.saveState(savedWebViewState); getArguments().putBundle("savedWebViewState", savedWebViewState); - ((BackPressedHandler.HostActivity) getActivity()) - .getBackPressedObserver() - .unregisterHandler(this); } @Override diff --git a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java index 026b77d2..c8d716dd 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.java @@ -37,6 +37,7 @@ import org.autojs.autojs.BuildConfig; import org.autojs.autojs.Pref; import org.autojs.autojs.R; import org.autojs.autojs.autojs.AutoJs; +import org.autojs.autojs.external.foreground.ForegroundService; import org.autojs.autojs.model.explorer.Explorers; import org.autojs.autojs.tool.AccessibilityServiceTool; import org.autojs.autojs.ui.BaseActivity; @@ -208,6 +209,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega public void exitCompletely() { finish(); FloatyWindowManger.hideCircularMenu(); + ForegroundService.stop(this); stopService(new Intent(this, FloatyService.class)); AutoJs.getInstance().getScriptEngineService().stopAll(); } @@ -264,6 +266,12 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega @Override public void onBackPressed() { + Fragment fragment = mPagerAdapter.getStoredFragment(mViewPager.getCurrentItem()); + if (fragment instanceof BackPressedHandler) { + if (((BackPressedHandler) fragment).onBackPressed(this)) { + return; + } + } if (!mBackPressObserver.onBackPressed(this)) { super.onBackPressed(); } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java index 4649dc02..068786c6 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java @@ -3,14 +3,17 @@ package org.autojs.autojs.ui.main; import android.support.annotation.CallSuper; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.view.View; +import com.stardust.util.BackPressedHandler; + /** * Created by Stardust on 2017/8/22. */ -public abstract class ViewPagerFragment extends Fragment { +public abstract class ViewPagerFragment extends Fragment implements BackPressedHandler { protected static final int ROTATION_GONE = -1; diff --git a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java index 203180e1..e9f0b637 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java @@ -72,23 +72,12 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH } } - @Override - public void onResume() { - super.onResume(); - ((BackPressedHandler.HostActivity) getActivity()) - .getBackPressedObserver() - .registerHandlerAtFront(this); - } - @Override public void onPause() { super.onPause(); Bundle savedWebViewState = new Bundle(); mWebView.saveState(savedWebViewState); getArguments().putBundle("savedWebViewState", savedWebViewState); - ((BackPressedHandler.HostActivity) getActivity()) - .getBackPressedObserver() - .unregisterHandler(this); } @Override diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java index 65b09364..09643151 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.java @@ -147,7 +147,7 @@ public class DrawerFragment extends android.support.v4.app.Fragment { } setChecked(mConnectionItem, DevPluginService.getInstance().isConnected()); if(Pref.isForegroundServiceEnabled()){ - GlobalAppContext.get().startService(new Intent(getContext(), ForegroundService.class)); + ForegroundService.start(GlobalAppContext.get()); setChecked(mForegroundServiceItem, true); } } @@ -265,9 +265,9 @@ public class DrawerFragment extends android.support.v4.app.Fragment { private void toggleForegroundService(DrawerMenuItemViewHolder holder) { boolean checked = holder.getSwitchCompat().isChecked(); if(checked){ - GlobalAppContext.get().startService(new Intent(getContext(), ForegroundService.class)); + ForegroundService.start(GlobalAppContext.get()); }else { - GlobalAppContext.get().stopService(new Intent(getContext(), ForegroundService.class)); + ForegroundService.stop(GlobalAppContext.get()); } } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/sample/MarketFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/sample/MarketFragment.java index ede9cc57..5269ad05 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/sample/MarketFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/sample/MarketFragment.java @@ -62,7 +62,6 @@ public class MarketFragment extends ViewPagerFragment implements BackPressedHand @Override public boolean onBackPressed(Activity activity) { - return false; } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java index 23e04bf4..7b405475 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/MyScriptListFragment.java @@ -35,7 +35,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; * Created by Stardust on 2017/3/13. */ @EFragment(R.layout.fragment_my_script_list) -public class MyScriptListFragment extends ViewPagerFragment implements BackPressedHandler, FloatingActionMenu.OnFloatingActionButtonClickListener { +public class MyScriptListFragment extends ViewPagerFragment implements FloatingActionMenu.OnFloatingActionButtonClickListener { private static final String TAG = "MyScriptListFragment"; @@ -68,22 +68,6 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress }); } - @Override - public void onResume() { - super.onResume(); - ((BackPressedHandler.HostActivity) getActivity()) - .getBackPressedObserver() - .registerHandlerAtFront(this); - } - - @Override - public void onPause() { - super.onPause(); - ((BackPressedHandler.HostActivity) getActivity()) - .getBackPressedObserver() - .unregisterHandler(this); - } - @Override protected void onFabClick(FloatingActionButton fab) { initFloatingActionMenuIfNeeded(fab); diff --git a/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.java index e0e8f293..d6ffb284 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.java @@ -1,5 +1,6 @@ package org.autojs.autojs.ui.main.task; +import android.app.Activity; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.widget.SwipeRefreshLayout; @@ -70,4 +71,8 @@ public class TaskManagerFragment extends ViewPagerFragment { AutoJs.getInstance().getScriptEngineService().stopAll(); } + @Override + public boolean onBackPressed(Activity activity) { + return false; + } } diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java index ed748eb8..b84f30df 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/dialog/BlockedMaterialDialog.java @@ -136,7 +136,7 @@ public class BlockedMaterialDialog extends MaterialDialog { } public MaterialDialog.Builder itemsCallbackMultiChoice(@Nullable Integer[] selectedIndices) { - dismissListener(dialog -> setAndNotify(new Integer[0])); + dismissListener(dialog -> setAndNotify(new int[0])); super.itemsCallbackMultiChoice(selectedIndices, (dialog, which, text) -> { setAndNotify(ArrayUtils.unbox(which)); return true;