Skip to content
This repository was archived by the owner on Dec 29, 2022. It is now read-only.

Commit a727ef5

Browse files
author
tacticalDevC
authored
Merge pull request #26 from tacticalDevC/future
Merging ready future branch in master. v0.6 release
2 parents 487af75 + e326209 commit a727ef5

File tree

14 files changed

+287
-111
lines changed

14 files changed

+287
-111
lines changed

.idea/codeStyles/Project.xml

Lines changed: 0 additions & 29 deletions
This file was deleted.

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
<uses-permission android:name="android.permission.SEND_SMS" />
1313
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
1414
<uses-permission android:name="android.permission.CALL_PHONE" />
15-
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
1615
<uses-permission android:name="android.permission.INTERNET" />
1716
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1817
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
18+
<uses-permission android:name="android.permission.VIBRATE"/>
1919

2020
<!--<uses-permission android:name="android.permission.READ_CONTACTS"/>-->
2121
<application

app/src/main/java/at/tacticaldevc/panictrigger/ContactPickerActivity.java

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
import android.view.Menu;
1818
import android.view.MenuItem;
1919
import android.view.View;
20+
import android.widget.AdapterView;
21+
import android.widget.ArrayAdapter;
22+
import android.widget.EditText;
23+
import android.widget.Spinner;
2024
import android.widget.TextView;
2125

2226
import java.util.ArrayList;
@@ -64,36 +68,57 @@ public void onClick(View view) {
6468
final View content = getLayoutInflater().inflate(R.layout.content_dialog_contact_entry, null);
6569
AlertDialog.Builder builder = new AlertDialog.Builder(ContactPickerActivity.this);
6670

67-
builder.setView(content);
68-
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
71+
final ArrayAdapter<String> ad = new ArrayAdapter<>(ContactPickerActivity.this, R.layout.support_simple_spinner_dropdown_item);
72+
ad.addAll(((ContactAdapter)rv.getAdapter()).getGroups().toArray(new String[]{}));
73+
((Spinner)content.findViewById(R.id.group_select)).setAdapter(ad);
74+
75+
AlertDialog alert = builder.setView(content)
76+
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
77+
@Override
78+
public void onClick(DialogInterface dialog, int which) {
79+
Contact c = new Contact(((TextView)content.findViewById(R.id.contact_name)).getText().toString(),
80+
((TextView)content.findViewById(R.id.contact_number)).getText().toString(),
81+
((String)((Spinner)content.findViewById(R.id.group_select)).getSelectedItem()));
82+
list.add(c);
83+
rv.getAdapter().notifyItemInserted(list.indexOf(c));
84+
}
85+
})
86+
.setNegativeButton("Cancel", null)
87+
.setNeutralButton("New group", null)
88+
.create();
89+
alert.show();
90+
alert.getButton(DialogInterface.BUTTON_NEUTRAL).setOnClickListener(new View.OnClickListener() {
6991
@Override
70-
public void onClick(DialogInterface dialog, int which) {
71-
Contact c = new Contact(((TextView)content.findViewById(R.id.contact_name)).getText().toString(), ((TextView)content.findViewById(R.id.contact_number)).getText().toString());
72-
list.add(c);
73-
rv.getAdapter().notifyItemInserted(list.indexOf(c));
92+
public void onClick(View v) {
93+
final EditText et = new EditText(ContactPickerActivity.this);
94+
new AlertDialog.Builder(ContactPickerActivity.this)
95+
.setTitle("Enter new group name")
96+
.setView(et)
97+
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
98+
@Override
99+
public void onClick(DialogInterface dialog, int which) {
100+
ad.add(et.getText().toString());
101+
}
102+
})
103+
.show();
74104
}
75105
});
76-
builder.setNegativeButton("Cancel", null);
77-
builder.show();
78106
}
79107
});
80108

81109
//Import data from shared prefs
82110
for(String contactString : prefs.getStringSet(mode, new HashSet<String>()))
83111
{
84112
String[] parts = contactString.split(";");
85-
if(parts.length == 2)
86-
{
87-
Contact c = new Contact(parts[1], parts[0]);
88-
list.add(c);
89-
rv.getAdapter().notifyItemInserted(list.indexOf(c));
90-
}
91-
else
92-
{
93-
Contact c = new Contact("", parts[0]);
94-
list.add(c);
95-
rv.getAdapter().notifyItemInserted(list.indexOf(c));
96-
}
113+
114+
Contact c = new Contact(
115+
(parts.length >= 2 ? parts[1] : ""),
116+
parts[0],
117+
(parts.length >= 3 ? parts[2] : "General")
118+
);
119+
120+
list.add(c);
121+
rv.getAdapter().notifyItemInserted(list.indexOf(c));
97122
}
98123
}
99124

@@ -109,7 +134,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
109134
for(int i = 0; i < rv.getAdapter().getItemCount(); i++)
110135
{
111136
Contact c = list.get(i);
112-
newValues.add(c.number + ";" + c.name);
137+
newValues.add(c.number + ";" + c.name + ";" + c.groupID);
113138
}
114139
prefs.edit().putStringSet(getString(R.string.var_numbers_trigger), newValues).putStringSet(getString(R.string.var_numbers_notify), newValues).apply();
115140
return true;
@@ -123,7 +148,7 @@ protected void onDestroy() {
123148
for(int i = 0; i < rv.getAdapter().getItemCount(); i++)
124149
{
125150
Contact c = list.get(i);
126-
newValues.add(c.number + ";" + c.name);
151+
newValues.add(c.number + ";" + c.name + ";" + c.groupID);
127152
}
128153
prefs.edit().putStringSet(mode, newValues).apply();
129154
}

app/src/main/java/at/tacticaldevc/panictrigger/TriggerActivity.java

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,43 @@
11
package at.tacticaldevc.panictrigger;
22

3-
import android.Manifest;
43
import android.content.DialogInterface;
54
import android.content.Intent;
6-
import android.content.pm.PackageManager;
75
import android.location.Location;
86
import android.location.LocationListener;
97
import android.location.LocationManager;
108
import android.net.Uri;
119
import android.os.Bundle;
10+
import android.os.Vibrator;
11+
import android.support.annotation.NonNull;
1212
import android.support.v7.app.AlertDialog;
1313
import android.support.v7.app.AppCompatActivity;
1414
import android.telephony.SmsManager;
1515
import android.view.View;
16+
import android.widget.ArrayAdapter;
17+
import android.widget.Spinner;
1618
import android.widget.Toast;
1719

1820
import java.util.HashSet;
1921
import java.util.Set;
2022

23+
import at.tacticaldevc.panictrigger.contactList.Contact;
24+
import at.tacticaldevc.panictrigger.utils.Utils;
25+
2126
public class TriggerActivity extends AppCompatActivity implements View.OnClickListener, LocationListener
2227
{
28+
private Vibrator v;
29+
private Contact[] notifyContacts;
2330

2431
@Override
2532
protected void onCreate(Bundle savedInstanceState) {
2633
super.onCreate(savedInstanceState);
2734
setContentView(R.layout.activity_trigger);
2835

29-
if(checkSelfPermission(Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED ||
30-
checkSelfPermission(Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED ||
31-
checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
32-
checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
33-
checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED ||
34-
checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED ||
35-
checkSelfPermission(Manifest.permission.CALL_PRIVILEGED) != PackageManager.PERMISSION_GRANTED ||
36-
checkSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED ||
37-
checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED ||
38-
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
39-
{
40-
requestPermissions(new String[]{
41-
Manifest.permission.RECEIVE_SMS,
42-
Manifest.permission.SEND_SMS,
43-
Manifest.permission.ACCESS_COARSE_LOCATION,
44-
Manifest.permission.ACCESS_FINE_LOCATION,
45-
Manifest.permission.CALL_PHONE,
46-
Manifest.permission.READ_CONTACTS,
47-
Manifest.permission.CALL_PRIVILEGED,
48-
Manifest.permission.INTERNET,
49-
Manifest.permission.ACCESS_NETWORK_STATE,
50-
Manifest.permission.WRITE_EXTERNAL_STORAGE,
51-
}, 1);
52-
}
36+
v = (Vibrator) getSystemService(VIBRATOR_SERVICE);
37+
38+
String[] perms;
39+
if((perms = Utils.checkPermissions(this)).length > 0)
40+
requestPermissions(perms, 255);
5341

5442
if(!getSharedPreferences("conf", MODE_PRIVATE).getBoolean("firstStartDone", false))
5543
{
@@ -92,11 +80,7 @@ public void onClick(DialogInterface dialog, int which) {
9280
startActivity(new Intent(TriggerActivity.this, SettingsActivity.class));
9381
}
9482
})
95-
.setNegativeButton("Yes.", new DialogInterface.OnClickListener() {
96-
@Override
97-
public void onClick(DialogInterface dialog, int which) {
98-
}
99-
})
83+
.setNegativeButton("Yes.", null)
10084
.show();
10185
}
10286
})
@@ -130,7 +114,28 @@ public void onClick(View v) {
130114
switch (v.getId())
131115
{
132116
case R.id.triggerButton:
133-
getCurrentLocationAndPanic();
117+
if(callEmergServices())
118+
{
119+
Intent emergService = new Intent(Intent.ACTION_CALL, Uri.parse("tel:112"));
120+
startActivity(emergService);
121+
return;
122+
}
123+
124+
this.v.vibrate(1000);
125+
final View content = getLayoutInflater().inflate(R.layout.content_dialog_trigger_group_select, null);
126+
final ArrayAdapter<String> ad = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, Utils.getContactGroups(this));
127+
((Spinner)content.findViewById(R.id.emergency_group)).setAdapter(ad);
128+
129+
new AlertDialog.Builder(this)
130+
.setView(content)
131+
.setPositiveButton("Trigger", new DialogInterface.OnClickListener() {
132+
@Override
133+
public void onClick(DialogInterface dialog, int which) {
134+
notifyContacts = Utils.getContactsByGroup(((Spinner)content.findViewById(R.id.emergency_group)).getSelectedItem().toString(), TriggerActivity.this);
135+
getCurrentLocationAndPanic();
136+
}
137+
})
138+
.show();
134139
break;
135140
case R.id.configure:
136141
Intent settings = new Intent(this, SettingsActivity.class);
@@ -141,28 +146,20 @@ public void onClick(View v) {
141146

142147
private void sendOutPanic(Location loc)
143148
{
144-
Set<String> contacts = getSharedPreferences("conf", MODE_PRIVATE).getStringSet(getString(R.string.var_numbers_notify), new HashSet<String>());
145149
String keyword = getSharedPreferences("conf", MODE_PRIVATE).getString(getString(R.string.var_words_keyword), "Panic");
146150
SmsManager manager = SmsManager.getDefault();
147-
for (String number : contacts)
151+
for (Contact c : notifyContacts)
148152
{
149153
StringBuilder sb = new StringBuilder(keyword);
150154
if(loc != null)
151155
sb.append("\n" + loc.getLatitude() + "\n" + loc.getLongitude());
152156

153-
manager.sendTextMessage(number.split(";")[0], null, sb.toString(), null, null);
157+
manager.sendTextMessage(c.number, null, sb.toString(), null, null);
154158
}
155159
}
156160

157161
private void getCurrentLocationAndPanic()
158162
{
159-
if(callEmergServices())
160-
{
161-
Intent emergService = new Intent(Intent.ACTION_CALL, Uri.parse("tel:112"));
162-
startActivity(emergService);
163-
return;
164-
}
165-
Location currLoc;
166163
LocationManager locManager = (LocationManager) getSystemService(LOCATION_SERVICE);
167164
try
168165
{
@@ -175,7 +172,7 @@ else if(locManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
175172
}
176173
catch (Exception e)
177174
{
178-
Toast.makeText(this, "GPS fix could be acquired. Please check your settings!", Toast.LENGTH_LONG).show();
175+
Toast.makeText(this, "GPS fix could not be acquired. Please check your settings!", Toast.LENGTH_LONG).show();
179176
sendOutPanic(null);
180177
}
181178
}
@@ -205,4 +202,16 @@ public void onProviderEnabled(String provider) {
205202
public void onProviderDisabled(String provider) {
206203

207204
}
205+
206+
@Override
207+
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
208+
if(!Utils.onRequestPermissionsResult(requestCode, permissions, grantResults))
209+
{
210+
new AlertDialog.Builder(TriggerActivity.this)
211+
.setTitle("Permissions")
212+
.setMessage("It looks like not all permissions have been granted.\nPlease grant them or the app will not work!")
213+
.show();
214+
findViewById(R.id.triggerButton).setEnabled(false);
215+
}
216+
}
208217
}

app/src/main/java/at/tacticaldevc/panictrigger/contactList/Contact.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
public class Contact {
44

5-
public String name, number;
6-
public Contact(String name, String number)
5+
public String name, number, groupID;
6+
public Contact(String name, String number, String groupID)
77
{
88
this.name = name;
99
this.number = number;
10+
this.groupID = groupID;
1011
}
1112
}

app/src/main/java/at/tacticaldevc/panictrigger/contactList/ContactAdapter.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import android.widget.TextView;
1010
import android.widget.Toast;
1111

12+
import java.util.HashSet;
1213
import java.util.List;
14+
import java.util.Set;
1315

1416
import javax.xml.datatype.Duration;
1517

@@ -32,6 +34,7 @@ public void onBindViewHolder(ContactItem contactItem, int i) {
3234
Contact ci = list.get(i);
3335
contactItem.name.setText(ci.name);
3436
contactItem.number.setText(ci.number);
37+
contactItem.group.setText(ci.groupID);
3538
contactItem.c = ci;
3639
}
3740

@@ -40,16 +43,31 @@ public int getItemCount() {
4043
return list.size();
4144
}
4245

46+
public Set<String> getGroups()
47+
{
48+
Set<String> groups = new HashSet<>();
49+
50+
groups.add("General");
51+
52+
for(Contact c : list)
53+
{
54+
groups.add(c.groupID);
55+
}
56+
57+
return groups;
58+
}
59+
4360
public class ContactItem extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener
4461
{
45-
public TextView name, number;
62+
public TextView name, number, group;
4663
public Contact c;
4764
public View v;
4865

4966
public ContactItem(View itemView) {
5067
super(itemView);
5168
name = itemView.findViewById(R.id.name);
5269
number = itemView.findViewById(R.id.number);
70+
group = itemView.findViewById(R.id.group);
5371

5472
itemView.setOnClickListener(this);
5573
itemView.setOnLongClickListener(this);

0 commit comments

Comments
 (0)