/*
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
*/
|
|
package cn.wildfire.chat.kit;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.SharedPreferences;
|
import android.content.pm.ActivityInfo;
|
import android.content.pm.PackageManager;
|
import android.graphics.Color;
|
import android.graphics.drawable.Drawable;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.Menu;
|
import android.view.MenuItem;
|
import android.view.View;
|
import android.view.inputmethod.InputMethodManager;
|
import android.widget.AdapterView;
|
import android.widget.LinearLayout;
|
import android.widget.Spinner;
|
import android.widget.TextView;
|
import androidx.annotation.LayoutRes;
|
import androidx.annotation.MenuRes;
|
import androidx.annotation.Nullable;
|
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.widget.Toolbar;
|
import androidx.core.content.ContextCompat;
|
import butterknife.BindView;
|
import butterknife.ButterKnife;
|
import butterknife.OnItemSelected;
|
import cn.wildfire.chat.kit.widget.SearchView;
|
|
import java.util.ArrayList;
|
|
public abstract class WfcBaseActivity extends AppCompatActivity {
|
private static final String TAG = "WfcBaseActivity";
|
@BindView(R2.id.toolbar)
|
protected Toolbar toolbar;
|
|
@BindView(R2.id.chat_layout)
|
LinearLayout chatNickNamesLayout;
|
|
@BindView(R2.id.tb_search_view)
|
protected SearchView searchView;
|
|
@BindView(R2.id.user_lineStatus_toolbar)
|
Spinner spinner;
|
|
@BindView(R2.id.top_title_toolbar)
|
TextView nickNameTextView;
|
|
final String[] lineStatusItems = {"空闲", "忙碌"};
|
final int[] lineStatusIconItems = {R.drawable.av_camera, R.drawable.av_mute};
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
beforeViews();
|
setContentView(contentLayout());
|
ButterKnife.bind(this);
|
setSupportActionBar(toolbar);
|
SharedPreferences sp = getSharedPreferences("config", Context.MODE_PRIVATE);
|
if (sp.getBoolean("darkTheme", false)) {
|
// dark
|
toolbar.getContext().setTheme(R.style.AppTheme_DarkAppbar);
|
customToolbarAndStatusBarBackgroundColor(true);
|
} else {
|
// light
|
toolbar.getContext().setTheme(R.style.AppTheme_LightAppbar);
|
customToolbarAndStatusBarBackgroundColor(false);
|
}
|
initLineStatus();
|
afterViews();
|
}
|
|
|
private void initLineStatus() {
|
ArrayList<LineStatusModel> lineStatusModels = new ArrayList<>();
|
for (int i = 0; i < lineStatusIconItems.length; i++) {
|
int lineStatusIconItem = lineStatusIconItems[i];
|
String lineStatusItem = lineStatusItems[i];
|
lineStatusModels.add(new LineStatusModel(lineStatusIconItem, lineStatusItem));
|
}
|
LineStatusAdapter lineStatusAdapter = new LineStatusAdapter(this, lineStatusModels);
|
spinner.setAdapter(lineStatusAdapter);
|
}
|
public void showUserStatus() {
|
spinner.setVisibility(View.VISIBLE);
|
chatNickNamesLayout.setVisibility(View.GONE);
|
}
|
|
public void setNickName() {
|
spinner.setVisibility(View.GONE);
|
|
CharSequence title = getTitle();
|
Log.i(TAG, "showNickName: title:" + title);
|
chatNickNamesLayout.setVisibility(View.VISIBLE);
|
nickNameTextView.setText(title);
|
setTitle(getString(R.string.Empty));
|
}
|
public void showSearchView() {
|
searchView.setVisibility(View.VISIBLE);
|
}
|
|
/**
|
* @param darkTheme 和toolbar.xml里面的 app:theme="@style/AppTheme.DarkAppbar" 相关
|
*/
|
private void customToolbarAndStatusBarBackgroundColor(boolean darkTheme) {
|
int toolbarBackgroundColorResId = darkTheme ? R.color.colorPrimary : R.color.white;
|
Drawable drawable = getResources().getDrawable(R.mipmap.ic_back);
|
if (darkTheme) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
drawable.setTint(Color.WHITE);
|
}
|
toolbar.setTitleTextColor(Color.WHITE);
|
} else {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
drawable.setTintList(null);
|
}
|
}
|
getSupportActionBar().setHomeAsUpIndicator(drawable);
|
if (showHomeMenuItem()) {
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
}
|
setTitleBackgroundResource(toolbarBackgroundColorResId, darkTheme);
|
}
|
|
/**
|
* 设置状态栏和标题栏的颜色
|
*
|
* @param resId 颜色资源id
|
*/
|
protected void setTitleBackgroundResource(int resId, boolean dark) {
|
toolbar.setBackgroundResource(resId);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
getWindow().setStatusBarColor(ContextCompat.getColor(this, resId));
|
}
|
setStatusBarTheme(this, dark);
|
}
|
|
protected boolean isDarkTheme() {
|
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
|
return sp.getBoolean("darkTheme", true);
|
}
|
|
@Override
|
public boolean onCreateOptionsMenu(Menu menu) {
|
if (menu() != 0) {
|
getMenuInflater().inflate(menu(), menu);
|
}
|
afterMenus(menu);
|
return super.onCreateOptionsMenu(menu);
|
}
|
|
@Override
|
public boolean onOptionsItemSelected(MenuItem item) {
|
if (item.getItemId() == android.R.id.home) {
|
hideInputMethod();
|
onBackPressed();
|
return true;
|
}
|
return super.onOptionsItemSelected(item);
|
}
|
|
protected void hideInputMethod() {
|
InputMethodManager imm = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
View view = getCurrentFocus();
|
if (view != null) {
|
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
}
|
}
|
|
/**
|
* @return 布局文件
|
*/
|
protected abstract @LayoutRes
|
int contentLayout();
|
|
/**
|
* @return menu
|
*/
|
protected @MenuRes
|
int menu() {
|
return 0;
|
}
|
|
/**
|
* {@link AppCompatActivity#setContentView(int)}之前调用
|
*/
|
protected void beforeViews() {
|
|
}
|
|
/**
|
* {@link AppCompatActivity#setContentView(int)}之后调用
|
* <p>
|
* 此时已经调用了{@link ButterKnife#bind(Activity)}, 子类里面不需要再次调用
|
*/
|
protected void afterViews() {
|
|
}
|
|
/**
|
* {@code getMenuInflater().inflate(menu(), menu);}之后调用
|
*
|
* @param menu
|
*/
|
protected void afterMenus(Menu menu) {
|
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
hideInputMethod();
|
}
|
|
protected boolean showHomeMenuItem() {
|
return true;
|
}
|
|
public boolean checkPermission(String permission) {
|
return checkPermission(new String[]{permission});
|
}
|
|
public boolean checkPermission(String[] permissions) {
|
boolean granted = true;
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
for (String permission : permissions) {
|
granted = checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
|
if (!granted) {
|
break;
|
}
|
}
|
}
|
return granted;
|
}
|
|
/**
|
* Changes the System Bar Theme.
|
*/
|
public static void setStatusBarTheme(final Activity pActivity, final boolean pIsDark) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
// Fetch the current flags.
|
final int lFlags = pActivity.getWindow().getDecorView().getSystemUiVisibility();
|
// Update the SystemUiVisibility dependening on whether we want a Light or Dark theme.
|
pActivity.getWindow().getDecorView().setSystemUiVisibility(pIsDark ? (lFlags & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) : (lFlags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR));
|
}
|
}
|
@OnItemSelected(R2.id.user_lineStatus_toolbar)
|
public void spinnerClick(AdapterView<?> parent, View view, int pos, long id) {
|
Log.i(TAG, "spinnerClick: " + pos);
|
}
|
}
|