package com.openfarmanager.android;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import com.openfarmanager.android.tips.HideToolbarTips;
import com.openfarmanager.android.toolbar.MenuItemImpl;
import com.openfarmanager.android.dialogs.QuickPopupDialog;
import com.openfarmanager.android.view.panels.MainToolbar;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
/**
* @author Vlad Namashko.
*/
public abstract class BaseActivity extends FragmentActivity {
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 1024;
protected QuickPopupDialog mMenuPopup;
protected void setupToolbarVisibility() {
if (App.sInstance.getSettings().isHideMainToolbar()) {
hideToolbar();
final View view = findViewById(android.R.id.content);
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int offset = (int) (10 * getResources().getDisplayMetrics().density);
if (mMenuPopup == null) {
mMenuPopup = new QuickPopupDialog(BaseActivity.this, view, R.layout.quick_action_menu_popup);
mMenuPopup.setPosition(Gravity.LEFT | Gravity.BOTTOM, offset);
mMenuPopup.getContentView().findViewById(R.id.quick_action_menu).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainToolbar.SubMenuDialog dialog = MainToolbar.SubMenuDialog.newInstance(view.getContext(),
getItems(), new MainToolbar.SubMenuDialog.OnActionSelectedListener() {
@Override
public void onActionSelected(MenuItem item) {
onToolbarItemSelected(item);
}
});
dialog.show();
// try {
// dialog.show(BaseActivity.this.getSupportFragmentManager(), "dialog");
// } catch (Exception ignore) {
// }
}
});
}
mMenuPopup.show();
new HideToolbarTips(BaseActivity.this, offset);
}
});
} else {
showToolbar();
if (mMenuPopup != null) {
mMenuPopup.dismiss();
}
}
}
protected boolean askPermission(String[] permissions) {
if (Build.VERSION.SDK_INT < 23) {
return true;
}
final List<String> permissionsRequested = new ArrayList<>();
for (String permission : permissions) {
if (checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) {
continue;
}
permissionsRequested.add(permission);
}
if (!permissionsRequested.isEmpty()) {
requestPermissions(permissionsRequested.toArray(new String[permissionsRequested.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
protected void onPermissionsResult(Map<String, Integer> permissions) {
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: {
Map<String, Integer> hash = new HashMap<>();
for (int i = 0; i < permissions.length; i++) {
hash.put(permissions[i], grantResults[i]);
}
onPermissionsResult(hash);
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
protected abstract void hideToolbar();
protected abstract void showToolbar();
protected abstract Handler getHandler();
protected abstract ArrayList<MenuItemImpl> getItems();
protected abstract void onToolbarItemSelected(MenuItem item);
}