Rate my app dialog when the user want to exit my app - java

I want to change the dialog of exit app with twi choices choice 1 = "rate" and choice 2 = "exit" now i can only show exit or stay dialog but i want to convert it to what i described here is the code :
#Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setNeutralButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
PicSelect.this.finish();
}
})
.setNegativeButton("No", null)
.show();
}
and this the class code `
public class PicSelect extends SherlockActivity {
private GridView photoGrid;
private int mPhotoSize, mPhotoSpacing;
private Itemadapter imageAdapter;
private AdView mAdView;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_picselct);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#c5d951")));
mAdView = (AdView) findViewById(R.id.adViewad);
mAdView.loadAd(new AdRequest.Builder().build());
mPhotoSize = getResources().getDimensionPixelSize(R.dimen.photo_size);
mPhotoSpacing = getResources().getDimensionPixelSize(R.dimen.photo_spacing);
photoGrid = (GridView) findViewById(R.id.albumGrid);
Model.LoadModel();
String[] ids = new String[Model.Items.size()];
for (int i= 0; i < ids.length; i++){
ids[i] = Integer.toString(i+1);
}
imageAdapter=new Itemadapter(getApplicationContext(), R.layout.photo_item,ids,"CATIMAGE");
photoGrid.setAdapter(imageAdapter);
// get the view tree observer of the grid and set the height and numcols dynamically
photoGrid.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
#Override
public void onGlobalLayout() {
if (imageAdapter.getNumColumns() == 0) {
final int numColumns = (int) Math.floor(photoGrid.getWidth() / (mPhotoSize + mPhotoSpacing));
if (numColumns > 0) {
final int columnWidth = (photoGrid.getWidth() / numColumns) - mPhotoSpacing;
imageAdapter.setNumColumns(numColumns);
imageAdapter.setItemHeight(columnWidth);
}
}
}
});
photoGrid.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Log.e("FolderName", Model.GetbyId(position+1).FolderName);
String FolderName=Model.GetbyId(position+1).FolderName;
String CategoryName=Model.GetbyId(position+1).Name;
Intent i=new Intent(PicSelect.this,PicItem.class);
i.putExtra("Folder", FolderName);
i.putExtra("Category", CategoryName);
startActivity(i);
}
});
}
#Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setNeutralButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
PicSelect.this.finish();
}
})
.setNegativeButton("No", null)
.show();
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.home, menu);
return super.onCreateOptionsMenu(menu);
}
#Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{
switch (menuItem.getItemId())
{
case R.id.rateapp:
final String appName = getPackageName();//your application package name i.e play store application url
try {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id="
+ appName)));
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(
Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id="
+ appName)));
}
return true;
case R.id.moreapp:
startActivity(new Intent(
Intent.ACTION_VIEW,
Uri.parse(getString(R.string.play_more_apps))));
return true;
default:
return super.onOptionsItemSelected(menuItem);
}
}
}
`
finaly if anyone know how to style the text thank you for your help

.setNegativeButton("Rate App", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("market://details?id=[your package name]"));
startActivity(i);
}
})
This will give you a negative option that says Rate App that when clicked opens the market to your app.

Improve your app with this snippet in onBackPressed():
if(isTaskRoot()) {
if (this.lastBackPressTime < System.currentTimeMillis() - 2000) {
toast = Toast.makeText(this, getString(R.string.hinweisBeendeApp), Toast.LENGTH_SHORT);
toast.show();
this.lastBackPressTime = System.currentTimeMillis();
} else {
if (toast != null) {
toast.cancel();
}
super.onBackPressed();
}
}else {
super.onBackPressed();
}

Related

How to display a message in MainActivity if there is no Internet?

If there is no Internet, display a certain xml in full screen when the application starts, that there is no Internet, and if there is, perform MainActivity.
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, MaterialSearchBar.OnSearchActionListener, PopupMenu.OnMenuItemClickListener {
private static final String TAG = "MainActivity";
#SuppressLint("StaticFieldLeak")
public static MaterialSearchBar searchBar;
private DrawerLayout drawer;
private NavigationView navigationView;
private AdView mAdView;
private static List<String> listPermissionsNeeded;
public boolean isInternetAvailable() {
try {
InetAddress address = InetAddress.getByName("www.google.com");
return !address.equals("");
} catch (UnknownHostException e) {
// Log error
}
return false;
}
#Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate: setting things up");
StaticUtils.requestQueue = (RequestQueue) Volley.newRequestQueue(getApplicationContext());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Admob banner
MobileAds.initialize(this, new OnInitializationCompleteListener() {
#Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
mAdView.setAdListener(new AdListener() {
#Override
public void onAdLoaded() {
super.onAdLoaded();
mAdView.setVisibility(View.VISIBLE);
}
#Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
mAdView.setVisibility(View.GONE);
}
});
//restoring recent searches list
StaticUtils.recentSearchesList = getArrayList(StaticUtils.KEY_LIST_PREFERENCCES);
if (StaticUtils.recentSearchesList==null){
StaticUtils.recentSearchesList = new ArrayList<>();
}
StaticUtils.savedImagesList = new ArrayList<>();
searchBar = findViewById(R.id.searchToolBar);
searchBar.setHint("Search Wallpapers");
searchBar.setOnSearchActionListener(this);
searchBar.hideSuggestionsList();
drawer = findViewById(R.id.drawer_layout);
navigationView = findViewById(R.id.nav_view);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
//sets home fragment open by default
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
playLogoAudio(); //to play the logo audio
searchEvents(); //advanced search events
}
#Override
public void onBackPressed() {
Log.d(TAG, "onBackPressed: back button invoked.");
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
public void grantPermissionBottomSheet(){
View dialogView = getLayoutInflater().inflate(R.layout.layout_bottomsheet, null);
final BottomSheetDialog dialog = new BottomSheetDialog(this);
Button ok = dialogView.findViewById(R.id.bt_bottomsheet);
ok.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Log.d(TAG, "onClick: bottomSheet button clicked.");
requestPermissions(MainActivity.this);
dialog.dismiss();
}
});
dialog.setContentView(dialogView);
dialog.show();
}
#Override
public boolean onNavigationItemSelected(#NonNull MenuItem item) {
Log.d(TAG, "onNavigationItemSelected: navigation item pressed.");
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_home) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
} else if (id == R.id.nav_saved) {
NetworkUtils network = new NetworkUtils(this);
if(network.checkConnection(drawer)){ //if network connected
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra(StaticUtils.KEY_FRAG_ID,2);
i.putExtra(StaticUtils.KEY_SEARCH_DATA,"Saved");
startActivity(i);
}
}else if (id == R.id.nav_downloads) {
//downloaded images
if (permissionsGranted(this)) {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra(StaticUtils.KEY_FRAG_ID, 4); //4 for downloads section
i.putExtra(StaticUtils.KEY_SEARCH_DATA, "Downloads");
startActivity(i);
}else{
grantPermissionBottomSheet();
}
} else if (id == R.id.nav_share) {
//share the app intent
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Hey! look what I found from play store.\nDownload cool & amazing wallpapers for your device from this app, "+getResources().getString(R.string.app_name)+", among various categories.\n\nCheck this out:\n"+StaticUtils.playStoreUrlDefault+getPackageName()+"\nDownload now:)");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, "Share app through..."));
} else if (id == R.id.nav_rate) {
//rate the app intent
Uri uri = Uri.parse("market://details?id=" + getApplicationContext().getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
// To count with Play market backstack, After pressing back button,
// to taken back to our application, we need to add following flags to intent.
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
startActivity(goToMarket);
} catch (Exception e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + getApplicationContext().getPackageName())));
}
} else if (id == R.id.nav_about) {
//about page
Intent i = new Intent(MainActivity.this, SecondActivity.class);
i.putExtra(StaticUtils.KEY_FRAG_ID,3); //3 for about fragment
i.putExtra(StaticUtils.KEY_SEARCH_DATA,"About");
startActivity(i);
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
public void playLogoAudio(){
Log.d(TAG, "playLogoAudio: playing logo audio");
View headerView = navigationView.getHeaderView(0);
ImageView drawerLogo = headerView.findViewById(R.id.imageLogo);
drawerLogo.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
MediaPlayer mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.hello);
mediaPlayer.start();
}
});
}
#Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
#Override
public void onSearchStateChanged(boolean enabled) {
if (enabled){
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new SearchFragment()).commit();
}else{
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
}
}
#Override
public void onSearchConfirmed(CharSequence text) {
Log.d(TAG, "onSearchConfirmed: confirmed search: "+text);
Intent i = new Intent(this,SecondActivity.class);
i.putExtra(StaticUtils.KEY_FRAG_ID,1);
i.putExtra(StaticUtils.KEY_SEARCH_DATA,String.valueOf(text));
if(new NetworkUtils(getApplicationContext()).checkConnection(drawer)) { //start intent if network connected
StaticUtils.recentSearchesList.add(String.valueOf(text)); //adds the query to the recents list
if (StaticUtils.recentSearchesList.size()>20){
StaticUtils.recentSearchesList.remove(0);
}
SearchFragment.updateAdapter(this,StaticUtils.recentSearchesList);
searchBar.setText(""); //removes the search query
startActivity(i);
}
}
#Override
public void onButtonClicked(int buttonCode) {
Log.d(TAG, "onButtonClicked: search interface button clicked: "+buttonCode);
switch (buttonCode){
case MaterialSearchBar.BUTTON_NAVIGATION:
drawer.openDrawer(GravityCompat.START);
break;
case MaterialSearchBar.BUTTON_BACK:
searchBar.disableSearch();
}
}
#Override
public void onPointerCaptureChanged(boolean hasCapture) {}
public void saveArrayList(ArrayList<String> list, String key){
Log.d(TAG, "saveArrayList: saving recent searchList data");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(list);
editor.putString(key, json);
editor.apply();
}
public ArrayList<String> getArrayList(String key){
Log.d(TAG, "getArrayList: getting saved recent searchList data");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
String json = prefs.getString(key, null);
Type type = new TypeToken<ArrayList<String>>() {}.getType();
return gson.fromJson(json, type);
}
#Override
protected void onPause() {
super.onPause();
//Saving arraylist when activity gets paused
saveArrayList(StaticUtils.recentSearchesList,StaticUtils.KEY_LIST_PREFERENCCES);
}
public void searchEvents(){
Log.d(TAG, "searchEvents: managing the search events");
searchBar.addTextChangeListener(new TextWatcher() {
ArrayList<String> tempList = new ArrayList<>();
#Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Log.d(TAG, "beforeTextChanged: clearing the list");
if (!tempList.isEmpty()){
tempList.clear();
}
}
#Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d(TAG, "onTextChanged: changing search query");
for (String string : StaticUtils.recentSearchesList) {
if (s.length() > 0) {
if (string.matches("(?i)(" + s + ").*")) {
tempList.add(string);
SearchFragment.updateAdapter(getApplicationContext(), tempList);
}
}else{
SearchFragment.updateAdapter(getApplicationContext(), StaticUtils.recentSearchesList);
}
}
}
#Override
public void afterTextChanged(Editable s) {}
});
}
#Override
protected void onResume() {
super.onResume();
navigationView.setCheckedItem(R.id.nav_home);
if (!permissionsGranted(this)){ //checking and requesting permissions
grantPermissionBottomSheet();
}
}
public static boolean permissionsGranted(Context context) {
Log.d(TAG, "checkPermissions: checking if permissions granted.");
int result;
listPermissionsNeeded = new ArrayList<>();
for (String p:permissions) {
result = ContextCompat.checkSelfPermission(context,p);
if (result != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(p);
}
}
//if all/some permissions not granted
return listPermissionsNeeded.isEmpty();
}
public static void requestPermissions(Activity activity){
Log.d(TAG, "requestPermissions: requesting permissions.");
ActivityCompat.requestPermissions(activity, listPermissionsNeeded.toArray(new
String[listPermissionsNeeded.size()]), StaticUtils.MULTIPLE_PERMISSIONS);
}
#Override
public void onRequestPermissionsResult(int requestCode, #NonNull String[] permissions, #NonNull int[] grantResults) {
Log.d(TAG, "onRequestPermissionsResult: action when permission granted or denied");
if (requestCode == StaticUtils.MULTIPLE_PERMISSIONS) {
if (grantResults.length <= 0) {
// no permissions granted.
showPermissionDialog();
}
}
}
public void showPermissionDialog(){
Log.d(TAG, "showPermissionDialog: requesting permissions");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Are you sure?");
builder.setMessage("You'll not be able to use this app properly without these permissions.");
builder.setPositiveButton("Try Again", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
//re-requesting permissions
requestPermissions(MainActivity.this);
}
});
builder.setNegativeButton("Cancel", null);
builder.show();
}
}
I would suggest some kind of different flow.
Most apps have something called a "Splash screen" (usually with a logo, sometimes kind of a progress bar).
what you can do is create a splash activity, - if there is internet call your MainActiviy, otherwise call another activity NetworkErrorActivity with the XML you want.

I want to add same value in shared preference each time click button

My question is i have a list of food item. when user press add button to add the dish i am saving this dish name in shared preference. but when i press the same dish twice in shared preference should show 2 dishes with the same name. but each time i press same dish its showing me only one dish. this is my code below.
public class Cafetaria extends AppCompatActivity {
String title;
ListView listView;
View customNav;
public String value,secdish,thrDish,frthDish;
public String Drink,Drink2,Drink3,Drink4;
String selectedDrink;
Dialog ViewDialog;
TextView tv_foodtype,tv_drink;
private Button button;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cafetaria);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
title = getIntent().getStringExtra("option");
getSupportActionBar().setTitle(title);
ActionBar actionBar = getSupportActionBar();
ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL);
customNav = LayoutInflater.from(this).inflate(R.layout.food_actionbar_layout, null); // layout which contains your button.
actionBar.setCustomView(customNav, lp);
actionBar.setDisplayShowCustomEnabled(true);
customNav.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
ViewDialog = new Dialog(Cafetaria.this);
ViewDialog.setContentView(R.layout.activity_order_detail);
ViewDialog.setTitle("Your Order Details");
tv_foodtype = (TextView)ViewDialog.findViewById(R.id.nameuser);
tv_drink = (TextView)ViewDialog.findViewById(R.id.passnum);
button = (Button)ViewDialog.findViewById(R.id.okBtn);
ViewDialog.show();
final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
value=(mSharedPreference.getString("firstDish", ""));
Drink=(mSharedPreference.getString("selectedDrinks", ""));
Drink2=(mSharedPreference.getString("selectedDrinks1", ""));
Drink3=(mSharedPreference.getString("selectedDrinks2", ""));
Drink4=(mSharedPreference.getString("selectedDrinks3", ""));
secdish=(mSharedPreference.getString("secdish", ""));
thrDish=(mSharedPreference.getString("thirdDish", ""));
frthDish=(mSharedPreference.getString("fourtDish", ""));
tv_foodtype.setText("Main Dishes"+ " \n"+value + " \n" + secdish +"\n"+thrDish+"\n"+frthDish);
tv_drink.setText("Drink"+" \n"+Drink + " \n" + Drink2 +"\n"+Drink3+"\n"+Drink4);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
ViewDialog.dismiss();
}
});
}
});
listView =(ListView)findViewById(R.id.listView);
Drawable chic = this.getResources().getDrawable(R.drawable.chicktikka);
final Drawable plus = this.getResources().getDrawable(R.drawable.plus);
Drawable minus = this.getResources().getDrawable(R.drawable.minus);
ArrayList<FoodItemData> listofItem = new ArrayList<>();
FoodListViewAdapter listViewAdapter= new FoodListViewAdapter(this,R.layout.item_layout,listofItem);
listView.setAdapter(listViewAdapter);
listofItem.add(new FoodItemData("Chicken Tikka","spicey chicken tikka with mixures of indian spices",chic,plus,minus));
listofItem.add(new FoodItemData("Onion Bhaji","spicey chicken tikka with mixures of indian spices",chic,plus,minus));
listofItem.add(new FoodItemData("Chicken Pizza","spicey chicken tikka with mixures of indian spices",chic,plus,minus));
listofItem.add(new FoodItemData("Chicken Masala","spicey chicken tikka with mixures of indian spices",chic,plus,minus));
}
#RequiresApi(api = Build.VERSION_CODES.HONEYCOMB_MR1)
public void plusClick(View v)
{
if (listView.getPositionForView(v)==0) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString("firstDish","Chicken Tikka");
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("Please Choose your drink");
final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};
final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
final boolean[] preCheckedItems = new boolean[]{false, false, false};
adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
#Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItems.add(which);
} else if (selectedItems.contains(which)) {
selectedItems.remove(which);
}
}
});
//Define the AlertDialog positive/ok/yes button
adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0; i < selectedItems.size(); i++) {
int IndexOfColorsArray = selectedItems.get(i);
selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);
editor.putString("selectedDrinks",selectedDrink);
editor.commit();
}
Toast.makeText(Cafetaria.this, "Your item has been added", Toast.LENGTH_SHORT).show();
}
});
//Define the Neutral/Cancel button in AlertDialog
adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
}
});
adb.show();
}
else if (listView.getPositionForView(v) == 1) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString("secdish","Onion Bhaji");
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("Choose your Drink");
final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};
final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
final boolean[] preCheckedItems = new boolean[]{false, false, false};
adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
#Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItems.add(which);
} else if (selectedItems.contains(which)) {
selectedItems.remove(which);
}
}
});
//Define the AlertDialog positive/ok/yes button
adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0; i < selectedItems.size(); i++) {
int IndexOfColorsArray = selectedItems.get(i);
selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);
editor.putString("selectedDrinks1",selectedDrink);
editor.commit();
}
Toast.makeText(Cafetaria.this, "Your item has been added", Toast.LENGTH_SHORT).show();
}
});
adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
//When user click the neutral/cancel button from alert dialog
}
});
adb.show();
}
else if (listView.getPositionForView(v) == 2) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString("thirdDish","Chicken Pizza");
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("Choose your Drink");
final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};
final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
final boolean[] preCheckedItems = new boolean[]{false, false, false};
adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
#Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItems.add(which);
} else if (selectedItems.contains(which)) {
selectedItems.remove(which);
}
}
});
adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0; i < selectedItems.size(); i++) {
int IndexOfColorsArray = selectedItems.get(i);
selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);
editor.putString("selectedDrinks2",selectedDrink);
editor.commit();
}
Toast.makeText(Cafetaria.this, "Your item has beed added", Toast.LENGTH_SHORT).show();
}
});
adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
//When user click the neutral/cancel button from alert dialog
}
});
adb.show();
}
else if (listView.getPositionForView(v) == 3) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cafetaria.this);
final SharedPreferences.Editor editor = prefs.edit();
editor.putString("fourtDish","Chicken Masala");
AlertDialog.Builder adb = new AlertDialog.Builder(this);
adb.setTitle("Choose your Drink");
final String[] drinks = new String[]{"Coke", "Fanta", "Sprite"};
final ArrayList<Integer> selectedItems = new ArrayList<Integer>();
final boolean[] preCheckedItems = new boolean[]{false, false, false};
adb.setMultiChoiceItems(drinks, preCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
#Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedItems.add(which);
} else if (selectedItems.contains(which)) {
//selectedItems.remove(which);
selectedItems.add(which);
}
}
});
adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
for (int i = 0; i < selectedItems.size(); i++) {
int IndexOfColorsArray = selectedItems.get(i);
selectedDrink = Arrays.asList(drinks).get(IndexOfColorsArray);
editor.putString("selectedDrinks3",selectedDrink);
editor.commit();
}
Toast.makeText(Cafetaria.this, "Your item has beed added", Toast.LENGTH_SHORT).show();
}
});
adb.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
//When user click the neutral/cancel button from alert dialog
}
});
adb.show();
}
}
public void minusClick(View v)
{
if (listView.getPositionForView(v)==0) {
final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mSharedPreference.edit().remove("firstDish").commit();
mSharedPreference.edit().remove("selectedDrinks").commit();
Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
}
else if (listView.getPositionForView(v)==1)
{
final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mSharedPreference.edit().remove("secDish").commit();
mSharedPreference.edit().remove("selectedDrinks1").commit();
Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
}
else if (listView.getPositionForView(v)==2)
{
final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mSharedPreference.edit().remove("thirdDish").commit();
mSharedPreference.edit().remove("selectedDrinks2").commit();
Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
}
else if (listView.getPositionForView(v)==3)
{
final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mSharedPreference.edit().remove("fourtDish").commit();
mSharedPreference.edit().remove("selectedDrinks3").commit();
Toast.makeText(Cafetaria.this, "Your Item has been removed", Toast.LENGTH_SHORT).show();
}
}
#Override
protected void onResume() {
super.onResume();
if (getSupportActionBar() != null){
getSupportActionBar().setTitle(title);
}
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
}
return false;
}
#Override
protected void onRestart() {
super.onRestart();
final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mSharedPreference.edit().remove("firstDish").commit();
mSharedPreference.edit().remove("selectedDrinks").commit();
mSharedPreference.edit().remove("selectedDrinks1").commit();
mSharedPreference.edit().remove("selectedDrinks2").commit();
mSharedPreference.edit().remove("selectedDrinks3").commit();
mSharedPreference.edit().remove("secdish").commit();
mSharedPreference.edit().remove("thirdDish").commit();
mSharedPreference.edit().remove("fourtDish").commit();
}
}`
This is the result I am getting. I press this dish twice and its shown only once. It should be shown twice the same dish name. Please Guide.
The code is really long to follow on here. But speaking generally, do you save each dish with different key-value pair? Maybe think about such solution. OR you could store the dishes in an array, which can be stored in Shared prefs, and once you want to see your dishes, just read out the Array List and display the items inside it.
You store the String into an Array, whenever you want to do it in your code. It's just like mArrayList.add("String"); and then you can update yuor SharedPrefs the same you already do, just check the URL on how to store ArrayList to SharedPrefs. Would be a cleaner solution in my view.
Here you can see how to store ArrayList in SharedPreferences:
Save ArrayList to SharedPreferences
And the once you want to display the items from ArrayList, you pull ArrayList from SharedPrefs and display them in AlertDialog ListView.
And here it is explained how to display Array Items in AlertDialog:
How can I display a list view in an Android Alert Dialog?

Changing android app locale via dialog list

I am trying to add a language changer to my app due to popular request. I have added a list dialog, and then changed the locale via that as you can see in my code example below. But whenever the user closes and reopens the app or changes the orientation, it reverts back to system language. I have read about Shared Preferences to do this, but i cant understand how to use them to set it? How should i go about this? Below is my related code for this
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
if (android.R.id.home == item.getItemId()) {
finish();
return super.onOptionsItemSelected(item);
}
switch (item.getItemId()) {
case R.id.action_upgrade:
Intent launchNewIntent = new Intent(
"android.intent.action.VIEW",
Uri.parse("https://play.google.com/store/apps/details?id=com.nath.thecompletembguidepro"));
startActivity(launchNewIntent);
return true;
case R.id.action_language:
final CharSequence[] items = { "English", "German", "Spanish",
"Potuguese" };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Change MB Guide Language");
builder.setItems(items, new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int pos) {
if (pos == 0) {
setLocale("en");
} else if (pos == 1) {
setLocale("de");
} else if (pos == 2) {
setLocale("es");
} else if (pos == 3) {
setLocale("pt");
}
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
here is the full activity code
public class MainActivity extends ActionBarActivity {
protected boolean small;
Locale myLocale;
#Override
protected void onStart() {
super.onStart();
RateThisApp.onStart(this);
RateThisApp.showRateDialogIfNeeded(this);
YoYo.with(Techniques.SlideInDown).duration(700)
.playOn(findViewById(android.R.id.list));
YoYo.with(Techniques.SlideInDown).duration(1200)
.playOn(findViewById(R.id.fabbutton));
}
private FeedbackDialog feedBack;
#SuppressLint("NewApi")
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StartAppSDK.init(this, "105864370", "207677226", new SDKAdPreferences()
.setAge(10).setGender(Gender.MALE), false);
LayoutInflater i = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
final View v = i.inflate(R.layout.mainactivityfavlayout, null);
final LinearLayout root = new LinearLayout(this);
root.addView(v);
setContentView(root);
getSupportActionBar().setIcon(R.drawable.newbook);
small = false;
final Fab mFab = (Fab) v.findViewById(R.id.fabbutton);
mFab.setFabDrawable(getResources().getDrawable(
R.drawable.ic_action_thumbs_up_down));
mFab.setFabColor(Color.parseColor("#795548"));
mFab.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0) {
if (!small) {
small = true;
feedBack.show();
} else {
small = false;
feedBack.show();
}
}
});
boolean installed = appInstalledOrNot("com.br4mmie.minebuilder");
if (installed) {
System.out.println("App already installed on your phone");
} else {
System.out.println("App is not installed on your phone");
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle(getString(R.string.info));
builder.setMessage(getString(R.string.mbnotfounderror));
builder.setPositiveButton(R.string.download,
new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
Intent launchNewIntent5 = new Intent(
"android.intent.action.VIEW",
Uri.parse("https://play.google.com/store/apps/details?id=com.br4mmie.minebuilder"));
startActivity(launchNewIntent5);
}
});
builder.setNegativeButton(getString(R.string.ignore),
new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alertdialog = builder.create();
alertdialog.show();
}
final CardListView list = (CardListView) findViewById(android.R.id.list);
CardAdapter<Card> adapter = new CardAdapter<Card>(this,
android.R.color.black);
list.setAdapter(adapter);
adapter.add(new CardHeader(getString(R.string.hello)));
adapter.add(new Card((getString(R.string.recipes)),
((getString(R.string.recipesbio)))).setThumbnail(getResources()
.getDrawable(R.drawable.bookicon)));
adapter.add(new Card((getString(R.string.id)),
((getString(R.string.idbio)))).setThumbnail(getResources()
.getDrawable(R.drawable.idicon)));
adapter.add(new Card((getString(R.string.mobs)),
((getString(R.string.mobsbio)))).setThumbnail(getResources()
.getDrawable(R.drawable.mobsicon)));
adapter.add(new Card((getString(R.string.biomesactitle)),
((getString(R.string.biomesbio)))).setThumbnail(getResources()
.getDrawable(R.drawable.biomesicon)));
adapter.add(new Card((getString(R.string.title_activity_ad)),
((getString(R.string.adbio)))).setThumbnail(getResources()
.getDrawable(R.drawable.miscicon)));
list.setOnCardClickListener(new CardClickListener() {
#Override
public void onCardClick(int index,
#SuppressWarnings("rawtypes") CardBase card, View view) {
Log.i("MBGuide", "Clicked a Button on homepage");
if (index == 1)
startActivity(new Intent(MainActivity.this,
RecipeChooserActivity.class));
if (index == 2)
startActivity(new Intent(MainActivity.this,
IDActivity.class));
if (index == 3)
startActivity(new Intent(MainActivity.this,
NewMobsActivity.class));
if (index == 4)
startActivity(new Intent(MainActivity.this,
DimensionChooserActivity.class));
if (index == 5)
startActivity(new Intent(MainActivity.this,
AdActivity.class));
}
});
getSupportActionBar().setIcon(R.drawable.newbook);
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color
.parseColor("#795548")));
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setTintColor(Color.parseColor("#5D4037"));
FeedbackSettings feedbackSettings = new FeedbackSettings();
feedbackSettings.setText(getString(R.string.feedbackinfo));
feedbackSettings.setTitle(getString(R.string.feedbacktitle));
feedbackSettings.setReplyTitle(getString(R.string.feedbacknewmessage));
feedbackSettings
.setReplyCloseButtonText(getString(R.string.feedbackclose));
feedbackSettings
.setReplyRateButtonText(getString(R.string.feedbackrate));
feedbackSettings.setBugLabel(getString(R.string.feedbackbug));
feedbackSettings.setIdeaLabel(getString(R.string.feedbackidea));
feedbackSettings.setQuestionLabel(getString(R.string.feedbackquestion));
feedBack = new FeedbackDialog(this, "AF-E0C9EDA7599B-26",
feedbackSettings);
}
#Override
protected void onPause() {
super.onPause();
feedBack.dismiss();
}
#Override
protected void onResume() {
super.onResume();
YoYo.with(Techniques.SlideInDown).duration(700)
.playOn(findViewById(android.R.id.list));
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
} catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed;
}
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
if (android.R.id.home == item.getItemId()) {
finish();
return super.onOptionsItemSelected(item);
}
switch (item.getItemId()) {
case R.id.action_upgrade:
Intent launchNewIntent = new Intent(
"android.intent.action.VIEW",
Uri.parse("https://play.google.com/store/apps/details?id=com.nath.thecompletembguidepro"));
startActivity(launchNewIntent);
return true;
case R.id.action_language:
final CharSequence[] items = { "English", "German", "Spanish",
"Potuguese" };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Change MB Guide Language");
builder.setItems(items, new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int pos) {
if (pos == 0) {
setLocale("en");
} else if (pos == 1) {
setLocale("de");
} else if (pos == 2) {
setLocale("es");
} else if (pos == 3) {
setLocale("pt");
}
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
case R.id.action_dlmb:
Intent launchNewIntent13 = new Intent(
"android.intent.action.VIEW",
Uri.parse("https://play.google.com/store/apps/details?id=com.br4mmie.minebuilder"));
startActivity(launchNewIntent13);
return true;
case R.id.action_about:
Intent launchNewIntent3 = new Intent(MainActivity.this,
AboutActivity.class);
startActivity(launchNewIntent3);
return true;
case R.id.action_credits:
Intent launchNewIntent1 = new Intent(MainActivity.this,
SixthActivity.class);
startActivityForResult(launchNewIntent1, 0);
return true;
case R.id.action_feedback:
Intent launchNewIntent11 = new Intent(
"android.intent.action.VIEW",
Uri.parse("https://www.youtube.com/watch?v=mTrNFlR8Mh4&feature=youtu.be"));
startActivity(launchNewIntent11);
return true;
case R.id.action_videohub:
AlertDialog.Builder builder1 = new AlertDialog.Builder(
MainActivity.this);
builder1.setTitle(getString(R.string.mbvhtitle));
builder1.setMessage(getString(R.string.mbvhdescription));
builder1.setPositiveButton(getString(R.string.download),
new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
Intent launchNewIntent5 = new Intent(
"android.intent.action.VIEW",
Uri.parse("https://play.google.com/store/apps/details?id=com.nath.mbvideohub"));
startActivity(launchNewIntent5);
Toast.makeText(MainActivity.this,
"Requires Network Connection",
Toast.LENGTH_SHORT).show();
}
});
builder1.setNegativeButton(getString(R.string.cancel),
new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alertdialog = builder1.create();
alertdialog.show();
}
return false;
}
{
;
}
}
I would make a settings menu with a preferencescreen. Then the user can change his language whenerver he want.
Settings menu with Preferencescreen
Example
SharedPreferences settings = getActivity().getSharedPreferences(
PREFS_NAME, MODE_PRIVATE);
// EditorObject to store values!
SharedPreferences.Editor editor = settings.edit();
editor.putString("Name", mEtxtName.getText().toString());
editor.putString("Email", mEtxtEmail.getText().toString());
editor.commit();
// GET VALUES IN FRAGMENT FROM PREFERENCES.
SharedPreferences settings = getActivity().getSharedPreferences(
PREFS_NAME, Context.MODE_PRIVATE);
mTxtShowEmail.setText(settings.getString("Email", "Default#email.com"));
mTxtShowName.setText(settings.getString("Name", "Defaultname"));

Use only one AlertDialog for a ListView

I have a list view with 5 items. If i click on an item, it start an AlertDialog that ask me if i want to download the file. Each item, have a different url download.
Instead of create 5 AlertDialog, can i just create a single AlertDialog and start the correct download url on item selected?
public class MapsListActivity extends Downloader implements OnItemClickListener{
private static final File MAP4 = new File(Environment.getExternalStorageDirectory().getPath() + "/osmdroid/tiles/", "map4.map");
private static final File MAP3 = new File(Environment.getExternalStorageDirectory().getPath() + "/osmdroid/tiles/", "map3.map");
private static final File MAP2 = new File(Environment.getExternalStorageDirectory().getPath() + "/osmdroid/tiles/", "map2.map");
private static final File MAP = new File(Environment.getExternalStorageDirectory().getPath() + "/osmdroid/tiles/", "map.map");
ListView listView;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String osmdroidFolder = "/osmdroid/";
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
File myOsmdroidFolder = new File(extStorageDirectory + osmdroidFolder);
myOsmdroidFolder.mkdir();
String tilesFolder = "/osmdroid/tiles/";
File myTilesFolder = new File(extStorageDirectory + tilesFolder);
myTilesFolder.mkdir();
listView = (ListView) findViewById(R.id.mapsList);
listView.setOnItemClickListener(this);
}
#Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
switch (position){
case 0:{
Intent Info = new Intent(MapsListActivity.this, MyMapsActivity.class);
startActivity(Info);
}
break;
case 1:{
if (MAP.exists()) {
Intent Info = new Intent(MapsListActivity.this, MyMapsActivity.class);
startActivity(Info);
}
else{
DialogDownload();
}
}
break;
case 2:{
if (MAP2.exists()) {
Intent Info = new Intent(MapsListActivity.this, MyMapsActivity.class);
startActivity(Info);
}
else{
DialogDownload();
}
}
break;
case 3:{
if (MAP3.exists()) {
Intent Info = new Intent(MapsListActivity.this, MyMapsActivity.class);
startActivity(Info);
}
else{
DialogDownload();
}
}
break;
case 4:{
if (MAP4.exists()) {
Intent Info = new Intent(MapsListActivity.this, MyMapsActivity.class);
startActivity(Info);
}
else{
DialogDownload();
}
}
break;
}
}
protected void DialogDownload() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Maps not present. Would you like to download ?");
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int item) {
/* functions that start the download
downloadmap();
downloadmap2();
downloadmap3();
downloadmap4();
*/
dialog.dismiss();
}
});
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
public void DialogDownLoad(String message,int pos)
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
// set title
alertDialogBuilder.setTitle("title");
// set dialog message
alertDialogBuilder.setMessage(message)
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
if(pos == 0){
// call downloadMap1();
}
if(pos == 1){
// call downloadMap2();
}
......................
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
............... //your code
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
and in your onItemClick() method
#Override
public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
message = "Your url";
DialogDownload(message,pos);
}

How to use return value of a method in a another class in android

I'm still new to Java and in Android programming so I'm a bit confused in some programming methods. I just want to ask, how do I use return value of method match_eye() in another class ?. I just want to use mmres.minVal and mmres.maxVal values in a another class (FdActivity) and display these values in my activity class.can anyone show me the code to do this :) thanks
class FdView extends SampleCvViewBase {
public void setMinFaceSize(float faceSize)
{
.........
}
........
........
double match_eye(Rect area, Mat mTemplate,int type){
Point matchLoc;
Mat mROI = mGray.submat(area);
int result_cols = mGray.cols() - mTemplate.cols() + 1;
int result_rows = mGray.rows() - mTemplate.rows() + 1;
//Check for bad template size
if(mTemplate.cols()==0 ||mTemplate.rows()==0){
return 0.0;
}
mResult = new Mat(result_cols,result_rows, CvType.CV_32FC1);
switch (type){
//TM_SQDIFF Matching Method
case TM_SQDIFF:
Imgproc.matchTemplate(mROI, mTemplate, mResult, Imgproc.TM_SQDIFF);
break;
//TM_SQDIFF Matching Method
case TM_SQDIFF_NORMED:
Imgproc.matchTemplate(mROI, mTemplate, mResult, Imgproc.TM_SQDIFF_NORMED);
break;
//TM_SQDIFF Matching Method
case TM_CCOEFF:
Imgproc.matchTemplate(mROI, mTemplate, mResult, Imgproc.TM_CCOEFF);
break;
//TM_SQDIFF Matching Method
case TM_CCOEFF_NORMED:
Imgproc.matchTemplate(mROI, mTemplate, mResult, Imgproc.TM_CCOEFF_NORMED) ;
break;
//TM_SQDIFF Matching Method
case TM_CCORR:
Imgproc.matchTemplate(mROI, mTemplate, mResult, Imgproc.TM_CCORR) ;
break;
//TM_SQDIFF Matching Method
case TM_CCORR_NORMED:
Imgproc.matchTemplate(mROI, mTemplate, mResult, Imgproc.TM_CCORR_NORMED) ;
break;
}
Core.MinMaxLocResult mmres = Core.minMaxLoc(mResult);
// there is difference in matching methods - best match is max/min value
if(type == TM_SQDIFF || type == TM_SQDIFF_NORMED)
{
matchLoc = mmres.minLoc;
}
else
{
matchLoc = mmres.maxLoc;
}
Point matchLoc_tx = new Point(matchLoc.x+area.x,matchLoc.y+area.y);
Point matchLoc_ty = new Point(matchLoc.x + mTemplate.cols() + area.x , matchLoc.y + mTemplate.rows()+area.y );
Core.rectangle(mRgba, matchLoc_tx,matchLoc_ty, new Scalar(255,255, 255, 255) ,2);
if(type == TM_SQDIFF || type == TM_SQDIFF_NORMED){
return mmres.maxVal;
}
else {
return mmres.minVal;
}
}
}
FdActivity Class
public class FdActivity extends Activity {
private static final String TAG = "Sample::Activity";
private MenuItem mItemFace50;
private MenuItem mItemFace40;
private MenuItem mItemFace30;
private MenuItem mItemFace20;
private MenuItem mItemType;
private FdView mView;
//Popup Window
private LayoutInflater inflater;
private PopupWindow pw;
private View popupView;
public static int method = 1;
//Timer Initializer
public int timer_start = 25000;
//Address Initializer
private String Address_location = "Ramakrishna Road, Colombo 00600, Sri Lanka";
//Sound Alerts
private MediaPlayer warning_sound;
private MediaPlayer lowbattery_alert;
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
#SuppressWarnings("deprecation")
#Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
//Load native libs after OpenCV initialization
System.loadLibrary("detection_based_tracker");
// Create and set View
mView = new FdView(mAppContext);
mView.setDetectorType(mDetectorType);
mView.setMinFaceSize(0.2f);
//Start Tracking btn
Button btn_track = new Button(getApplicationContext());
btn_track.setText("Settings");
btn_track.setBackgroundResource(R.drawable.custombutton_settings);
btn_track.setTextColor(Color.WHITE);
btn_track.setTypeface(null, Typeface.BOLD);
RelativeLayout.LayoutParams btnp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
btnp.addRule(RelativeLayout. ALIGN_PARENT_RIGHT);
btn_track.setId(2);
btn_track.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Popup Menu
pw = new PopupWindow(getApplicationContext());
pw.setTouchable(true);
pw.setFocusable(true);
pw.setOutsideTouchable(true);
pw.setTouchInterceptor(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
pw.dismiss();
return true;
}
return false;
}
});
pw.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
pw.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
pw.setOutsideTouchable(false);
pw.setContentView(popupView);
pw.showAsDropDown(v, 0, 0);
}
});
final TextView count_down = new TextView(getApplicationContext());
count_down.setText("Driver's State Recognition System");
count_down.setGravity(Gravity.CENTER);
count_down.setBackgroundColor(Color.BLACK);
count_down.setTextColor(Color.WHITE);
count_down.setTypeface(null, Typeface.BOLD);
RelativeLayout.LayoutParams textTimer = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
textTimer.setMargins(30, 0, 0, 30);
textTimer.addRule(RelativeLayout. ALIGN_PARENT_BOTTOM);
count_down.setId(6);
//Count Timer
final CountDownTimer cntr_aCounter = new CountDownTimer(timer_start, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
//Start Alert Sound
warning_sound.start();
warning_sound.setLooping(true);
Toast.makeText(getBaseContext(), "Alerting Started...", Toast.LENGTH_LONG).show();
//Start Vibration
final Vibrator vibe = (Vibrator)getSystemService(VIBRATOR_SERVICE);
vibe.vibrate(20000);
//Start Alert Box and Emergency Text Alert
final AlertDialog alertDialog_warning = new AlertDialog.Builder(FdActivity.this).create();
alertDialog_warning.setCancelable(false);
alertDialog_warning.setTitle("WARNING");
alertDialog_warning.setMessage("Drowsiness Detected..Please Respond");
alertDialog_warning.setIcon(R.drawable.warning_icon);
alertDialog_warning.setButton("Respond", new DialogInterface.OnClickListener() {
final CountDownTimer timer_count_down = new CountDownTimer(25000, 1000) {
public void onTick(long millisUntilFinished) {
count_down.setText("Seconds Remaining To Respond : " + millisUntilFinished / 1000);
}
public void onFinish() {
//Emergency Text Alert
String phoneNo = "0712055056";
String sms = "Emergancy Alert !...Location : " + Address_location;
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, sms, null, null);
Toast.makeText(getApplicationContext(), "Emergancy Alert Sent !",Toast.LENGTH_LONG).show();
}
catch (Exception e) {
Toast.makeText(getApplicationContext(),"Emergancy Alert Sending Failed",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
//Stop all active alerts
count_down.setText("Not Responded Emergancy Alert Sent");
Animation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(50); //You can manage the time of the blink with this parameter
anim.setStartOffset(20);
anim.setRepeatMode(Animation.REVERSE);
anim.setRepeatCount(Animation.INFINITE);
count_down.startAnimation(anim);
count_down.setTextColor(Color.RED);
alertDialog_warning.cancel();
warning_sound.pause();
vibe.cancel();
timer_count_down.cancel();
}
}.start();
public void onClick(final DialogInterface alertDialog_warning, final int which) {
alertDialog_warning.cancel();
//Stop Alert Sound
warning_sound.pause();
vibe.cancel();
timer_count_down.cancel();
count_down.setText("Driver's State Recognition System");
finish();
startActivity(getIntent());
}
});
alertDialog_warning.show();
}
};
cntr_aCounter.start();
//Turn off btn
Button btn_off = new Button(getApplicationContext());
btn_off.setText("Switch Off");
btn_off.setBackgroundResource(R.drawable.custombutton_settings);
btn_off.setTextColor(Color.WHITE);
btn_off.setTypeface(null, Typeface.BOLD);
RelativeLayout.LayoutParams btnp1 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
btnp1.addRule(RelativeLayout. ALIGN_PARENT_LEFT);
btn_off.setId(3);
btn_off.setOnClickListener(new OnClickListener() {
public void onClick(View x) {
//Alert Dialog Box
AlertDialog.Builder alertDialog = new AlertDialog.Builder(FdActivity.this);
alertDialog.setTitle("WARNING");
alertDialog.setMessage(" Switch off Drowsiness Detection. \n Are you sure ?");
alertDialog.setIcon(R.drawable.warning_icon);
alertDialog.setCancelable(false); // This blocks the 'BACK' button
// Setting "Yes" Btn
alertDialog.setPositiveButton("YES",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
cntr_aCounter.cancel();
}
});
// Setting "NO" Btn
alertDialog.setNegativeButton("NO",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"Tracking Process Continued", Toast.LENGTH_LONG).show();
dialog.cancel();
}
});
alertDialog.show();
}
});
RelativeLayout frameLayout = new RelativeLayout(
getApplicationContext());
frameLayout.addView(mView, 0);
frameLayout.addView(btn_track, btnp);
frameLayout.addView(btn_off, btnp1);
frameLayout.addView(count_down, textTimer);
setContentView(frameLayout);
// Check native OpenCV camera
if (!mView.openCamera()) {
AlertDialog ad = new AlertDialog.Builder(mAppContext).create();
ad.setCancelable(false); // This blocks the 'BACK' button
ad.setMessage("Fatal Error: Can't Open Camera!");
ad.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
ad.show();
}
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
private int mDetectorType = 0;
private String[] mDetectorName;
public FdActivity() {
Log.i(TAG, "Instantiated new " + this.getClass());
mDetectorName = new String[2];
mDetectorName[FdView.JAVA_DETECTOR] = "Java";
mDetectorName[FdView.NATIVE_DETECTOR] = "Native (tracking)";
}
#Override
protected void onPause() {
Log.i(TAG, "onPause");
super.onPause();
if (mView != null)
mView.releaseCamera();
}
#SuppressWarnings("deprecation")
#Override
protected void onResume() {
Log.i(TAG, "onResume");
super.onResume();
if (mView != null && !mView.openCamera()) {
AlertDialog ad = new AlertDialog.Builder(this).create();
ad.setCancelable(false); // This blocks the 'BACK' button
ad.setMessage("Fatal error: can't open camera!");
ad.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
ad.show();
}
}
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//Sound Alert
warning_sound = MediaPlayer.create(this, R.raw.warning_alert);
lowbattery_alert = MediaPlayer.create(this, R.raw.low_battery);
//Popup menu
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
popupView = inflater.inflate(R.layout.popup_menu_layout, null, false);
Log.i(TAG, "Trying to load OpenCV library");
if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, this,mOpenCVCallBack)) {
Log.e(TAG, "Cannot connect to OpenCV Manager");
}
//battery
this.registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.i(TAG, "onCreateOptionsMenu");
mItemFace50 = menu.add("Face size 50%");
mItemFace40 = menu.add("Face size 40%");
mItemFace30 = menu.add("Face size 30%");
mItemFace20 = menu.add("Face size 20%");
mItemType = menu.add(mDetectorName[mDetectorType]);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.i(TAG, "Menu Item selected " + item);
if (item == mItemFace50)
mView.setMinFaceSize(0.5f);
else if (item == mItemFace40)
mView.setMinFaceSize(0.4f);
else if (item == mItemFace30)
mView.setMinFaceSize(0.3f);
else if (item == mItemFace20)
mView.setMinFaceSize(0.2f);
else if (item == mItemType) {
mDetectorType = (mDetectorType + 1) % mDetectorName.length;
item.setTitle(mDetectorName[mDetectorType]);
mView.setDetectorType(mDetectorType);
}
return true;
}
//Popup Menu Actions
public void clickOne(View v) {
pw.dismiss();
mView.resetLearFramesCount();
Toast.makeText(getApplicationContext(), "Please wait..Template Recreating", Toast.LENGTH_LONG).show();
}
public void clickTwo(View v) {
pw.dismiss();
Toast.makeText(getBaseContext(), "Please wait..Switching Camera", Toast.LENGTH_LONG).show();
}
public void clickThree(View v) {
pw.dismiss();
Toast.makeText(getBaseContext(), "Please wait..Changing Tracking Method", Toast.LENGTH_LONG).show();
}
public void clickFour(View v) {
pw.dismiss();
Toast.makeText(getBaseContext(), "Please wait..Changing Tracking Method", Toast.LENGTH_LONG).show();
//Alert Dialog Box
AlertDialog.Builder alertDialog = new AlertDialog.Builder(FdActivity.this);
alertDialog.setCancelable(false);
alertDialog.setTitle("Exit Detection");
alertDialog.setMessage(" WARNING...You are about to exit system");
alertDialog.setIcon(R.drawable.warning_icon);
alertDialog.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.setNegativeButton("System Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
finish();
startActivity(new Intent("org.opencv.samples.facedetect.CLEARSCREENSETTINGS"));
}
});
alertDialog.show();
}
private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver() {
#Override
public void onReceive(Context context, Intent intent) {
int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
int plugged= intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,0);
if(plugged==1){
Toast.makeText(getApplicationContext(), "Device Pluged In", Toast.LENGTH_LONG).show();
lowbattery_alert.pause();
}
if(plugged==0 && level > 20){
Toast.makeText(getApplicationContext(), "WARNING : Device Not Pluged In", Toast.LENGTH_LONG).show();
lowbattery_alert.pause();
}
else if(plugged==0 && level <= 20){
Toast.makeText(getApplicationContext(), "WARNING : Battery Low Please Plug In", Toast.LENGTH_LONG).show();
//alert sound
lowbattery_alert.start();
//Start Vibration
final Vibrator vibe = (Vibrator)getSystemService(VIBRATOR_SERVICE);
vibe.vibrate(20000);
//Alert Dialog Box
AlertDialog.Builder alertDialog = new AlertDialog.Builder(FdActivity.this);
alertDialog.setCancelable(false);
alertDialog.setTitle("Battery Low (" + level + "%)");
alertDialog.setMessage(" WARNING...Battery Low Please Connect The Charger");
alertDialog.setIcon(R.drawable.warning_icon);
// Setting "Switch Off" Btn
alertDialog.setPositiveButton("Switch Off", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
lowbattery_alert.pause();
vibe.cancel();
}
});
// Setting "Continue" Btn
alertDialog.setNegativeButton("Continue", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"Tracking Process Continued", Toast.LENGTH_LONG).show();
dialog.cancel();
vibe.cancel();
lowbattery_alert.pause();
}
});
alertDialog.show();
}
}
};
public void onBackPressed() {
Toast.makeText(getBaseContext(), "Please click Switch off button to deactivate the system", Toast.LENGTH_LONG).show();
}
}
As far as I understand you have Activity where you want to show two values which you want to get from another class. You can't return two values from one function that's why I suggest you to create your own Object which will hold these values and you can return your custom object from match_eye() for example and get your values from your Activity. Here is example code:
MyCustomObject.java
public MyObject{
private int mFirstValue;
private int mSecondValue;
// public constructor
public MyObject(int firstValue, int secondValue){
this.mFirstValue = firstValue;
this.mSecondValue = secondValue;
}
// first value getter
public int getFirstValue(){
return mFirstValue;
}
// second value getter;
public int getSecondValue(){
return mSecondValue;
}
}
and in your match_eye() you can do something similar to this:
public MyObject match_eye(Rect area, Mat mTemplate,int type){
//do your calculations here ...
int firstValue = 0; // get first value
int secondValue = 0; // get second value
return new MyObject(firstValue, secondValue);
}
and in your Activity you just need to call :
MyObject mCurrentObject = FdView.match_eye(/*params*/); // static call as example
if(mCurrentObject != null){
int myFirstValue = mCurrentObject.getFirstValue();
int mySecondValue = mCurrentObject.getSecondValue();
// Show these values in your Activity.
}
Take object of that class in which you defined your method into your second activity and use like below code:
testing t1 = new testing();
double returnval = t1.match_eye(yourarea, youmTemplate,yourtype);
System.out.println(returnval);
For sending value using Intent:
Intent i = new Intent(context,MainActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("var", returnval)
context.startActivity(i);

Categories