package com.attachakki.mobile;
import android.Manifest;import android.app.*;import android.content.*;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.net.Uri;import android.os.*;import android.telephony.SmsManager;import android.view.Gravity;import android.webkit.*;import android.widget.*;
public class MainActivity extends Activity{
private static final String P="AttaChakkiSettings",K="web_url",DEF="https://attachki.tayabsoft.com/public/login.php";private static final int SMS=55,CAM=56,FILE=1001;private WebView web;private ProgressBar progress;private ValueCallback<Uri[]> callback;private SharedPreferences prefs;
@Override public void onCreate(Bundle b){super.onCreate(b);prefs=getSharedPreferences(P,MODE_PRIVATE);String u=prefs.getString(K,"");if(u.isEmpty())setup();else open(norm(u));}
private String norm(String u){u=u==null?"":u.trim();if(u.isEmpty())return "";if(!u.startsWith("http://")&&!u.startsWith("https://"))u="https://"+u;return u;}
private void setup(){LinearLayout l=new LinearLayout(this);l.setOrientation(LinearLayout.VERTICAL);l.setPadding(30,30,30,30);l.setGravity(Gravity.CENTER);TextView t=new TextView(this);t.setText("Atta Chakki\n\nWeb Address / Server Address");t.setTextSize(23);t.setGravity(Gravity.CENTER);EditText e=new EditText(this);e.setSingleLine(true);e.setHint("https://your-domain.com/public/login.php");Button s=new Button(this);s.setText("Save & Open");Button d=new Button(this);d.setText("Default Address");l.addView(t);l.addView(e);l.addView(s);l.addView(d);setContentView(l);s.setOnClickListener(v->{String u=norm(e.getText().toString());if(u.isEmpty()){toast("Web Address لکھیں");return;}save(u);open(u);});d.setOnClickListener(v->{save(DEF);open(DEF);});}
private void save(String u){prefs.edit().putString(K,u).apply();}
private void open(String url){LinearLayout r=new LinearLayout(this);r.setOrientation(LinearLayout.VERTICAL);LinearLayout bar=new LinearLayout(this);Button set=new Button(this);set.setText("⚙ Server");Button ref=new Button(this);ref.setText("↻");progress=new ProgressBar(this);progress.setVisibility(View.GONE);bar.addView(set);bar.addView(ref);bar.addView(progress,new LinearLayout.LayoutParams(55,55));web=new WebView(this);r.addView(bar,new LinearLayout.LayoutParams(-1,-2));r.addView(web,new LinearLayout.LayoutParams(-1,0,1));setContentView(r);WebSettings x=web.getSettings();x.setJavaScriptEnabled(true);x.setDomStorageEnabled(true);x.setDatabaseEnabled(true);x.setMediaPlaybackRequiresUserGesture(false);x.setAllowFileAccess(true);x.setAllowContentAccess(true);CookieManager.getInstance().setAcceptCookie(true);CookieManager.getInstance().setAcceptThirdPartyCookies(web,true);web.setWebViewClient(new WebViewClient(){public void onPageStarted(WebView v,String u,Bitmap f){progress.setVisibility(View.VISIBLE);}public void onPageFinished(WebView v,String u){progress.setVisibility(View.GONE);}public void onReceivedError(WebView v,WebResourceRequest q,WebResourceError e){if(q.isForMainFrame()){progress.setVisibility(View.GONE);toast("Website open نہیں ہو رہی۔ Address/SSL چیک کریں۔");}}});web.setWebChromeClient(new WebChromeClient(){public boolean onShowFileChooser(WebView v,ValueCallback<Uri[]> c,FileChooserParams p){callback=c;if(Build.VERSION.SDK_INT>=23&&checkSelfPermission(Manifest.permission.CAMERA)!=PackageManager.PERMISSION_GRANTED)requestPermissions(new String[]{Manifest.permission.CAMERA},CAM);try{startActivityForResult(p.createIntent(),FILE);}catch(Exception e){callback=null;toast("File/Camera open نہیں ہو سکا");return false;}return true;}});web.addJavascriptInterface(new SMSBridge(this),"AndroidSms");web.addJavascriptInterface(new PrintBridge(this),"Android");set.setOnClickListener(v->settings());ref.setOnClickListener(v->web.reload());web.loadUrl(url);}
private void settings(){EditText e=new EditText(this);e.setSingleLine(true);e.setText(prefs.getString(K,""));new AlertDialog.Builder(this).setTitle("Server / Web Address").setView(e).setPositiveButton("Save & Open",(d,w)->{String u=norm(e.getText().toString());if(!u.isEmpty()){save(u);open(u);}}).setNeutralButton("Reset",(d,w)->{prefs.edit().remove(K).apply();setup();}).setNegativeButton("Cancel",null).show();}
public class SMSBridge{Activity a;SMSBridge(Activity a){this.a=a;}@JavascriptInterface public void sendSms(String m,String msg){a.runOnUiThread(()->{if(Build.VERSION.SDK_INT>=23&&checkSelfPermission(Manifest.permission.SEND_SMS)!=PackageManager.PERMISSION_GRANTED){requestPermissions(new String[]{Manifest.permission.SEND_SMS},SMS);toast("SMS permission دیں اور دوبارہ SMS کریں");return;}try{SmsManager.getDefault().sendTextMessage(m,null,msg,null,null);toast("SMS بھیجنے کی درخواست دے دی گئی");}catch(Exception e){toast("SMS send نہیں ہوا");}});}}
public class PrintBridge{Activity a;PrintBridge(Activity a){this.a=a;}@JavascriptInterface public void printPage(){a.runOnUiThread(()->{android.print.PrintManager pm=(android.print.PrintManager)a.getSystemService(Context.PRINT_SERVICE);if(pm!=null&&web!=null)pm.print("AttaChakki Receipt",web.createPrintDocumentAdapter("AttaChakki Receipt"),new android.print.PrintAttributes.Builder().setMediaSize(android.print.PrintAttributes.MediaSize.NA_INDEX_4X6).setMinMargins(android.print.PrintAttributes.Margins.NO_MARGINS).build());});}}
@Override protected void onActivityResult(int r,int c,Intent d){super.onActivityResult(r,c,d);if(r==FILE&&callback!=null){Uri[] o=null;if(c==RESULT_OK&&d!=null){if(d.getData()!=null)o=new Uri[]{d.getData()};else if(d.getClipData()!=null){int n=d.getClipData().getItemCount();o=new Uri[n];for(int i=0;i<n;i++)o[i]=d.getClipData().getItemAt(i).getUri();}}callback.onReceiveValue(o);callback=null;}}
private void toast(String s){Toast.makeText(this,s,Toast.LENGTH_LONG).show();}@Override public void onBackPressed(){if(web!=null&&web.canGoBack())web.goBack();else super.onBackPressed();}}
