Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
		
							parent
							
								
									c5385b1c5c
								
							
						
					
					
						commit
						3bf01e28f0
					
				| 
						 | 
				
			
			@ -0,0 +1,194 @@
 | 
			
		|||
package cl.rmd.cordova.dialoggps;
 | 
			
		||||
 | 
			
		||||
import android.view.ViewGroup.LayoutParams;
 | 
			
		||||
import android.widget.ImageView;
 | 
			
		||||
import android.widget.LinearLayout;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
 | 
			
		||||
import org.apache.cordova.CallbackContext;
 | 
			
		||||
import org.apache.cordova.CordovaInterface;
 | 
			
		||||
import org.apache.cordova.CordovaPlugin;
 | 
			
		||||
import org.apache.cordova.PluginResult;
 | 
			
		||||
import org.json.JSONArray;
 | 
			
		||||
import org.json.JSONException;
 | 
			
		||||
 | 
			
		||||
import android.annotation.SuppressLint;
 | 
			
		||||
import android.app.AlertDialog;
 | 
			
		||||
import android.app.AlertDialog.Builder;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.DialogInterface;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.graphics.Color;
 | 
			
		||||
import android.location.LocationManager;
 | 
			
		||||
import android.provider.Settings;
 | 
			
		||||
 | 
			
		||||
public class DialogGPS extends CordovaPlugin {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean execute(String action,JSONArray args,CallbackContext callbackContext) throws JSONException {
 | 
			
		||||
 | 
			
		||||
            if(this.cordova.getActivity().isFinishing()) return true;   
 | 
			
		||||
            else if(action.equals("DISPLAY")) {
 | 
			
		||||
                LocationManager  locationManager = (LocationManager) this.cordova.getActivity().getSystemService(Context.LOCATION_SERVICE);
 | 
			
		||||
                boolean gpsEnable = false;
 | 
			
		||||
                try {
 | 
			
		||||
                    gpsEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
 | 
			
		||||
                }catch(Exception e) {}
 | 
			
		||||
                
 | 
			
		||||
                if(! gpsEnable) {
 | 
			
		||||
                    this.createDialog(args.getString(0),args.getString(1),args.getString(2),args.getJSONArray(3),callbackContext);
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }else if (action.equals("IS_GPS_ACTIVE")) {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  Construct de GPS dialog with de title,message and buttons especified.
 | 
			
		||||
     *  When positive button is pressed then its redirection to enable GPS
 | 
			
		||||
     *
 | 
			
		||||
     *  @param message              content of the dialog, that has display to the user.
 | 
			
		||||
     *  @param title                title of the dialog
 | 
			
		||||
     *  @param buttonLabels         array of labels to the positive and negative button.
 | 
			
		||||
     *  @param callbackContext      callback to display the result
 | 
			
		||||
    **/
 | 
			
		||||
    public synchronized void createDialog(final String title, final String message,final String description,final JSONArray buttonLabels, final CallbackContext callbackContext) {
 | 
			
		||||
        final CordovaInterface cordova = this.cordova;
 | 
			
		||||
 | 
			
		||||
        Runnable runnable = new Runnable() {
 | 
			
		||||
            @SuppressLint("NewApi")
 | 
			
		||||
            public void run() {
 | 
			
		||||
 | 
			
		||||
                AlertDialog.Builder builder = newDialog(cordova,title,message,description);
 | 
			
		||||
                builder.setCancelable(true);
 | 
			
		||||
                String positiveButtonName = null;
 | 
			
		||||
 | 
			
		||||
                if(buttonLabels.length() == 2) {
 | 
			
		||||
                    try {
 | 
			
		||||
                        positiveButtonName = buttonLabels.getString(1);
 | 
			
		||||
                    } catch (JSONException e) {
 | 
			
		||||
                        // TODO Auto-generated catch block
 | 
			
		||||
                        e.printStackTrace();
 | 
			
		||||
                    }
 | 
			
		||||
                }else if (buttonLabels.length() == 3) {
 | 
			
		||||
                        
 | 
			
		||||
                    try {
 | 
			
		||||
                            positiveButtonName = buttonLabels.getString(2);
 | 
			
		||||
                            builder.setNeutralButton(buttonLabels.getString(1),
 | 
			
		||||
                                new AlertDialog.OnClickListener() {
 | 
			
		||||
                                    public void onClick(DialogInterface dialog,int which) {
 | 
			
		||||
                                        dialog.dismiss();
 | 
			
		||||
                                        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK,1));
 | 
			
		||||
                                    }
 | 
			
		||||
                                });
 | 
			
		||||
 | 
			
		||||
                    }catch(JSONException e) {}
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if(buttonLabels.length() == 3 || buttonLabels.length() == 2) {
 | 
			
		||||
                    try {
 | 
			
		||||
                            builder.setNegativeButton(buttonLabels.getString(0),
 | 
			
		||||
                                new AlertDialog.OnClickListener() {
 | 
			
		||||
                                    public void onClick(DialogInterface dialog, int which) {
 | 
			
		||||
                                        dialog.dismiss();
 | 
			
		||||
                                        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK,0));
 | 
			
		||||
                                    }
 | 
			
		||||
                                });
 | 
			
		||||
 | 
			
		||||
                            builder.setPositiveButton(positiveButtonName,
 | 
			
		||||
                                new AlertDialog.OnClickListener() {
 | 
			
		||||
                                    public void onClick(DialogInterface dialog,int which) {
 | 
			
		||||
                                        dialog.dismiss();
 | 
			
		||||
                                        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK,2));
 | 
			
		||||
                                        cordova.getActivity().startActivity(
 | 
			
		||||
                                            new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
 | 
			
		||||
                                                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
 | 
			
		||||
                                    }
 | 
			
		||||
                                });
 | 
			
		||||
 | 
			
		||||
                            builder.setOnCancelListener(new AlertDialog.OnCancelListener() {
 | 
			
		||||
                                public void onCancel(DialogInterface dialog){
 | 
			
		||||
                                    dialog.dismiss();
 | 
			
		||||
                                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK,0));
 | 
			
		||||
                                }
 | 
			
		||||
                            });
 | 
			
		||||
 | 
			
		||||
                             changeTextDirection(builder);
 | 
			
		||||
                        
 | 
			
		||||
                    }catch(JSONException e) {}
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            };
 | 
			
		||||
        };
 | 
			
		||||
        this.cordova.getActivity().runOnUiThread(runnable);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  Method that create a new Dialog.   
 | 
			
		||||
     *
 | 
			
		||||
     *   @param cordova     CordovaInterface to append the dialog created. 
 | 
			
		||||
     *                      the dialog is forced to display with the theme light default
 | 
			
		||||
     **/
 | 
			
		||||
    @SuppressLint( "NewApi" )
 | 
			
		||||
    private AlertDialog.Builder newDialog(CordovaInterface cordova,final String title,final String message, final String description) {
 | 
			
		||||
        final Context context = cordova.getActivity().getApplicationContext();
 | 
			
		||||
        final String packageName = context.getPackageName();
 | 
			
		||||
        AlertDialog.Builder builder;
 | 
			
		||||
        int dpi = context.getResources().getDisplayMetrics().densityDpi;
 | 
			
		||||
        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) {
 | 
			
		||||
           builder = new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
 | 
			
		||||
        } else {
 | 
			
		||||
           builder = new AlertDialog.Builder(cordova.getActivity());
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        builder.setMessage(message);
 | 
			
		||||
        builder.setTitle(title);
 | 
			
		||||
        
 | 
			
		||||
        LinearLayout _layout = new LinearLayout(context);
 | 
			
		||||
        LinearLayout.LayoutParams _layout_params  = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
 | 
			
		||||
        _layout.setLayoutParams(_layout_params);
 | 
			
		||||
        _layout.setPadding(0, dpToPixels(20,dpi),dpToPixels(24,dpi),0);
 | 
			
		||||
        _layout.setOrientation(LinearLayout.HORIZONTAL);
 | 
			
		||||
 | 
			
		||||
        ImageView  _icon = new ImageView(context);
 | 
			
		||||
        _icon.setImageResource(cordova.getActivity().getResources().getIdentifier("ic_location","drawable",packageName));
 | 
			
		||||
        TextView _description = new TextView(context);
 | 
			
		||||
        
 | 
			
		||||
        _icon.setLayoutParams(new LinearLayout.LayoutParams(dpToPixels(72,dpi),dpToPixels(72,dpi)));
 | 
			
		||||
        _description.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,dpToPixels(72,dpi)));
 | 
			
		||||
 | 
			
		||||
        _icon.setContentDescription("Location Icon");
 | 
			
		||||
        _icon.setPadding(dpToPixels(24,dpi),0,dpToPixels(24,dpi),dpToPixels(24,dpi));
 | 
			
		||||
        _icon.setColorFilter(Color.argb(139,0,0,0));
 | 
			
		||||
        
 | 
			
		||||
        _description.setTextSize(16);
 | 
			
		||||
        _description.setText(description);
 | 
			
		||||
        _description.setTextColor(Color.argb(139,0,0,0));
 | 
			
		||||
        
 | 
			
		||||
        _layout.addView(_icon);
 | 
			
		||||
        _layout.addView(_description);
 | 
			
		||||
        builder.setView(_layout);
 | 
			
		||||
        
 | 
			
		||||
        return builder;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressLint("NewApi")
 | 
			
		||||
    private void changeTextDirection(Builder dlg){
 | 
			
		||||
        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
 | 
			
		||||
        dlg.create();
 | 
			
		||||
        AlertDialog dialog =  dlg.show();
 | 
			
		||||
        if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
 | 
			
		||||
            TextView messageview = (TextView)dialog.findViewById(android.R.id.message);
 | 
			
		||||
            messageview.setTextDirection(android.view.View.TEXT_DIRECTION_LOCALE);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private int dpToPixels(int dp,int dpi) {
 | 
			
		||||
        return (int)(dp*dpi/160);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user