Skip to content

Commit

Permalink
Merge pull request #211 from Trumeet/DEV-20180930
Browse files Browse the repository at this point in the history
Dev 20180930
  • Loading branch information
Trumeet committed Nov 30, 2018
2 parents 061fc8b + 174335b commit 7881203
Show file tree
Hide file tree
Showing 77 changed files with 2,139 additions and 1,032 deletions.
3 changes: 0 additions & 3 deletions README.md
Expand Up @@ -6,15 +6,12 @@

在任何非 MIUI 设备上体验小米系统级推送。

![](https://raw.githubusercontent.com/Trumeet/MiPushFramework/master/art/screenshot.png)
![](https://raw.githubusercontent.com/Trumeet/MiPushFramework/master/art/tab_events.jpg)
![](https://raw.githubusercontent.com/Trumeet/MiPushFramework/master/art/tab_permissions.jpg)
![](https://raw.githubusercontent.com/Trumeet/MiPushFramework/master/art/ask.jpg)
![](https://raw.githubusercontent.com/Trumeet/MiPushFramework/master/art/tab_settings.jpg)
![](https://raw.githubusercontent.com/Trumeet/MiPushFramework/master/art/tab_apps.jpg)

从图1可以看出,`PushDemo`(使用小米推送的应用)并未启动后台推送服务,也成功收到了推送。

## 什么是小米系统级推送,为什么会有这个项目

小米推送是小米公司提供的推送服务。就我个人看来非常喜欢这个服务,而且许多App都在使用(如酷安)。
Expand Down
7 changes: 0 additions & 7 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -44,8 +44,6 @@
</activity>
<activity android:name="top.trumeet.mipushframework.wizard.CheckRunInBackgroundActivity"
android:theme="@style/AppTheme.Wizard" />
<activity android:name="top.trumeet.mipushframework.wizard.fake.FakeBuildActivity"
android:theme="@style/AppTheme.Wizard" />
<activity android:name="top.trumeet.mipushframework.wizard.FinishWizardActivity"
android:theme="@style/AppTheme.Wizard" />
<activity android:name="top.trumeet.mipushframework.wizard.UsageStatsPermissionActivity"
Expand All @@ -72,11 +70,6 @@
android:value="${fabricKey}" />


<provider
android:name="top.trumeet.mipushframework.preferences.MiPushAppPreferenceProvider"
android:authorities="top.trumeet.mipushframework.preferences"
android:exported="true"/>

<!-- Push API -->
<provider
android:authorities="moe.yuuta.mipush.push.api.PushServiceAPI"
Expand Down
57 changes: 28 additions & 29 deletions app/src/main/java/top/trumeet/mipushframework/MainActivity.java
@@ -1,7 +1,6 @@
package top.trumeet.mipushframework;

import android.animation.Animator;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
Expand Down Expand Up @@ -67,34 +66,34 @@ private void checkAndConnect() {
showConnectFail(FAIL_REASON_NOT_INSTALLED);
return;
}
composite.add(CheckPermissionsUtils.checkPermissionsAndStartAsync(this,
(result) -> {
if (result.permissionResult.granted &&
result.activityResult.resultCode() == Activity.RESULT_OK) {
connect();
} else {
if (!result.permissionResult.granted) {
Toast.makeText(this, getString(top.trumeet.common.R.string.request_permission,
result.permissionResult.name), Toast.LENGTH_LONG)
.show();
if (!result.permissionResult.shouldShowRequestPermissionRationale) {
Uri uri = Uri.fromParts("package", getPackageName(), null);
startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(uri)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} else {
checkAndConnect();
}
}
if (result.activityResult.resultCode() != Activity.RESULT_OK) {
Toast.makeText(this, getString(R.string.request_battery_whitelist), Toast.LENGTH_LONG)
.show();
checkAndConnect();
}
}
}, (throwable -> {
Log.e(TAG, "check permissions", throwable);
})));
composite.add(CheckPermissionsUtils.checkAndRun(result -> {
switch (result) {
case OK:
connect();
break;
case PERMISSION_NEEDED:
Toast.makeText(this, getString(top.trumeet.common.R.string.request_permission), Toast.LENGTH_LONG)
.show();
// Restart to request permissions again.
checkAndConnect();
break;
case PERMISSION_NEEDED_SHOW_SETTINGS:
Toast.makeText(this, getString(top.trumeet.common.R.string.request_permission), Toast.LENGTH_LONG)
.show();
Uri uri = Uri.fromParts("package", getPackageName(), null);
startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(uri)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
break;
case REMOVE_DOZE_NEEDED:
Toast.makeText(this, getString(R.string.request_battery_whitelist), Toast.LENGTH_LONG)
.show();
checkAndConnect();
break;
}
}, throwable -> {
Log.e(TAG, "check permissions", throwable);
}, this));
}

private void connect() {
Expand Down
@@ -1,20 +1,16 @@
package top.trumeet.mipushframework;

import android.app.Application;
import android.content.SharedPreferences;

import com.crashlytics.android.Crashlytics;
import com.crossbowffs.remotepreferences.RemotePreferenceAccessException;

import androidx.work.ExistingWorkPolicy;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;

import com.crashlytics.android.Crashlytics;
import io.fabric.sdk.android.Fabric;

import rx_activity_result2.RxActivityResult;
import top.trumeet.common.utils.PreferencesUtils;
import top.trumeet.mipush.BuildConfig;
import top.trumeet.mipushframework.debug.IdJob;
import top.trumeet.mipushframework.utils.BaseAppsBinder;

/**
* Created by Trumeet on 2017/12/23.
Expand Down
Expand Up @@ -13,6 +13,7 @@
import io.reactivex.internal.functions.Functions;
import rx_activity_result2.RxActivityResult;
import top.trumeet.common.Constants;
import top.trumeet.common.push.PushServiceAccessibility;
import top.trumeet.mipushframework.models.ActivityResultAndPermissionResult;

public class CheckPermissionsUtils {
Expand All @@ -27,13 +28,58 @@ public static Disposable checkPermissionsAndStartAsync (@NonNull FragmentActivit
public static Disposable checkPermissionsAndStartAsync (@NonNull FragmentActivity context,
@NonNull Consumer<ActivityResultAndPermissionResult> onNext,
@NonNull Consumer<Throwable> onError) {
return Observable.zip(RxActivityResult.on(context)
.startIntent(new Intent()
.setComponent(new ComponentName(Constants.SERVICE_APP_NAME,
Constants.REMOVE_DOZE_COMPONENT_NAME)))
return Observable.zip(buildRemoveDozeObservable(context)
, new RxPermissions(context)
.requestEachCombined(Constants.permissions.WRITE_SETTINGS),
ActivityResultAndPermissionResult::new)
.subscribe(onNext, onError);
}



private static Observable<Boolean> buildRemoveDozeObservable (@NonNull FragmentActivity context) {
return Observable.<Boolean>create(emitter -> {
if (PushServiceAccessibility.isInDozeWhiteList(context)) {
emitter.onNext(true);
} else {
// Let it empty to start activity
}
emitter.onComplete();
}).switchIfEmpty(RxActivityResult.on(context)
.startIntent(new Intent()
.setComponent(new ComponentName(Constants.SERVICE_APP_NAME,
Constants.REMOVE_DOZE_COMPONENT_NAME))).map(fragmentActivityResult -> {
return /* Older push don't return OK if granted. */
PushServiceAccessibility.isInDozeWhiteList(context);
}));
}

public enum CheckResult {
OK,
PERMISSION_NEEDED,
PERMISSION_NEEDED_SHOW_SETTINGS,
REMOVE_DOZE_NEEDED
}

public static Disposable checkAndRun (Consumer<CheckResult> action, Consumer<Throwable> onError, FragmentActivity context) {
return CheckPermissionsUtils.checkPermissionsAndStartAsync(context,
(result) -> {
if (result.permissionResult.granted &&
result.removeDozeResult) {
action.accept(CheckResult.OK);
return;
}
if (!result.permissionResult.granted) {
if (!result.permissionResult.shouldShowRequestPermissionRationale) {
action.accept(CheckResult.PERMISSION_NEEDED_SHOW_SETTINGS);
} else {
action.accept(CheckResult.PERMISSION_NEEDED);
}
return;
}
if (!result.removeDozeResult) {
action.accept(CheckResult.REMOVE_DOZE_NEEDED);
}
}, onError);
}
}
Expand Up @@ -2,14 +2,12 @@

import com.tbruyelle.rxpermissions2.Permission;

import rx_activity_result2.Result;

public class ActivityResultAndPermissionResult<Activity> {
public final Result<Activity> activityResult;
public class ActivityResultAndPermissionResult {
public final boolean removeDozeResult;
public final Permission permissionResult;

public ActivityResultAndPermissionResult(Result<Activity> activityResult, Permission permissionResult) {
this.activityResult = activityResult;
public ActivityResultAndPermissionResult(boolean removeDozeResult, Permission permissionResult) {
this.removeDozeResult = removeDozeResult;
this.permissionResult = permissionResult;
}
}

0 comments on commit 7881203

Please sign in to comment.