package net.arvin.afbaselibrary.uis.activities; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.widget.Toast; import net.arvin.afbaselibrary.R; import net.arvin.afbaselibrary.data.AFConstant; import net.arvin.afbaselibrary.data.AFKillAllActivityEvent; import net.arvin.afbaselibrary.nets.BaseNetService; import net.arvin.afbaselibrary.utils.AFLog; import net.arvin.afbaselibrary.utils.AFPermissionUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.List; import butterknife.ButterKnife; import butterknife.Unbinder; /** * Created by arvinljw on 17/5/11 15:09 * Function:公共部分 * Desc:包含权限申请,加载数据提示框,Toast,View注解,状态栏控制等 */ public abstract class BaseActivity extends AppCompatActivity implements AFPermissionUtil.PermissionCallbacks { private Unbinder unbinder; private ProgressDialog progressDialog; private AFPermissionUtil.IRequestPermissionCallback mPermissionCallback; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getContentView()); EventBus.getDefault().register(this); unbinder = ButterKnife.bind(this); init(savedInstanceState); initViews(savedInstanceState); } protected FragmentActivity getAFContext() { return this; } protected void init(Bundle savedInstanceState) { } protected void controlStatusBar() { } protected void showToast(String message) { if (getAFContext() == null || TextUtils.isEmpty(message)) { return; } int during = Toast.LENGTH_SHORT; if (message.length() > AFConstant.TOAST_LONG_MESSAGE_LENGTH) { during = Toast.LENGTH_LONG; } Toast.makeText(getAFContext(), message, during).show(); } protected void showProgressDialog(String message) { if (progressDialog == null) { progressDialog = new ProgressDialog(getAFContext()); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setIndeterminate(false); progressDialog.setCancelable(true); } progressDialog.setMessage(message != null ? message : ""); progressDialog.show(); } protected void hideProgressDialog() { if (progressDialog != null) { progressDialog.dismiss(); } } protected void startActivity(Class clazz) { startActivity(clazz, null); } protected void startActivity(Class clazz, Bundle bundle) { Intent intent = new Intent(getAFContext(), clazz); if (bundle != null) { intent.putExtras(bundle); } startActivity(intent); getAFContext().overridePendingTransition(R.anim.af_right_in, 0); } protected void startActivityForResult(int requestCode, Class clazz) { startActivityForResult(requestCode, clazz, null); } protected void startActivityForResult(int requestCode, Class clazz, Bundle bundle) { Intent intent = new Intent(getAFContext(), clazz); if (bundle != null) { intent.putExtras(bundle); } startActivityForResult(intent, requestCode); getAFContext().overridePendingTransition(R.anim.af_right_in, 0); } protected void requestPermission(AFPermissionUtil.IRequestPermissionCallback permissionCallback, String reqStr, String... permissions) { mPermissionCallback = permissionCallback; if (AFPermissionUtil.hasPermissions(getAFContext(), permissions)) { onPermissionsAllGranted(); } else { AFPermissionUtil.requestPermissions(getAFContext(), reqStr, AFConstant.PERMISSION_REQUEST_CODE, permissions); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); AFPermissionUtil.onRequestPermissionsResult(requestCode, permissions, grantResults, getAFContext()); } @Override public void onPermissionsGranted(int requestCode, List<String> perms) { } @Override public void onPermissionsDenied(int requestCode, List<String> perms) { AFPermissionUtil.checkDeniedPermissionsNeverAskAgain(getAFContext(), getAFContext().getString(R.string.af_permission_tips), getAFContext().getString(R.string.setting), getAFContext().getString(R.string.cancel), perms); } @Override public void onPermissionsAllGranted() { if (mPermissionCallback != null) { mPermissionCallback.agreeAll();//同意了全部权限的回调 AFLog.w("request permission all agreed"); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == AFConstant.PERMISSION_OPEN_SETTING_REQUEST_CODE) { permissionRequestBackFromSetting(); } } /** * 这个只处理权限请求从设置界面返回,这时候应该再次调用请求权限部分的方法 */ protected void permissionRequestBackFromSetting() { } @Override public void onBackPressed() { finish(); overridePendingTransition(0, R.anim.af_right_out); } @Subscribe(threadMode = ThreadMode.MAIN) public void finishAllActivityEvent(AFKillAllActivityEvent event){ finish(); } @Override protected void onDestroy() { super.onDestroy(); unbinder.unbind(); EventBus.getDefault().unregister(this); BaseNetService.onDestroy(this); } protected abstract int getContentView(); protected abstract void initViews(Bundle savedInstanceState); }