fix conflict
This commit is contained in:
parent
222de3533c
commit
852cddc2cb
@ -9,15 +9,15 @@ import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
public class DisplayMessageActivity extends AppCompatActivity {
|
||||
|
||||
private Handler handlerCoil;
|
||||
private Handler handlerInputRegister;
|
||||
private Handler handlerDiscreteInput;
|
||||
|
||||
private GlobalState state;
|
||||
|
||||
@ -31,15 +31,19 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(discreteInputMessageReceiver, new IntentFilter("readOnlyDiscreteInput"));
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(inputRegisterMessageReceiver, new IntentFilter("readOnlyInputRegister"));
|
||||
|
||||
|
||||
state = (GlobalState) getApplicationContext();
|
||||
|
||||
Toast toast = Toast.makeText(getApplicationContext(), "This is my toast !", Toast.LENGTH_LONG);
|
||||
toast.show();
|
||||
//handler
|
||||
handlerCoil = new Handler();
|
||||
handlerCoil.post(refreshCoil);
|
||||
|
||||
handlerInputRegister = new Handler();
|
||||
handlerInputRegister.post(refreshInputRegister);
|
||||
|
||||
handlerDiscreteInput = new Handler();
|
||||
handlerDiscreteInput.post(refreshDiscreteInput);
|
||||
}
|
||||
|
||||
Runnable refreshCoil = new Runnable() {
|
||||
@ -49,34 +53,44 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
serviceIntent.setAction("read.coil");
|
||||
serviceIntent.putExtra("extra.ip.address", state.getIpAddress());
|
||||
serviceIntent.putExtra("extra.ip.port", state.getPort());
|
||||
serviceIntent.putExtra("extra.ref", state.getCoilRef());
|
||||
serviceIntent.putExtra("extra.count", state.getCoilCount());
|
||||
serviceIntent.putExtra("extra.ref", GlobalState.InputConfig.COIL.getStartReference());
|
||||
serviceIntent.putExtra("extra.count", GlobalState.InputConfig.COIL.getCount());
|
||||
serviceIntent.putExtra("extra.intent.name", "readOnlyCoil");
|
||||
getApplicationContext().startService(serviceIntent);
|
||||
|
||||
handlerCoil.postDelayed(this, 10000);
|
||||
handlerCoil.postDelayed(this, 2000);
|
||||
}
|
||||
};
|
||||
|
||||
Runnable refreshDiscretInput = new Runnable() {
|
||||
Runnable refreshDiscreteInput = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// TODO Auto-generated method stub
|
||||
TextView textView = findViewById(R.id.textView1);
|
||||
Date currentTime = Calendar.getInstance().getTime();
|
||||
textView.setText(new Double(Math.random()).toString());
|
||||
handlerCoil.postDelayed(this, 1000);
|
||||
Intent serviceIntent = new Intent(getApplicationContext(), MyIntentService.class);
|
||||
serviceIntent.setAction("read.discrete.input");
|
||||
serviceIntent.putExtra("extra.ip.address", state.getIpAddress());
|
||||
serviceIntent.putExtra("extra.ip.port", state.getPort());
|
||||
serviceIntent.putExtra("extra.ref", GlobalState.InputConfig.DISCRETE_INPUT.getStartReference());
|
||||
serviceIntent.putExtra("extra.count", GlobalState.InputConfig.DISCRETE_INPUT.getCount());
|
||||
serviceIntent.putExtra("extra.intent.name", "readOnlyDiscreteInput");
|
||||
getApplicationContext().startService(serviceIntent);
|
||||
|
||||
handlerDiscreteInput.postDelayed(this, 5000);
|
||||
}
|
||||
};
|
||||
|
||||
Runnable refreshInputRegister = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// TODO Auto-generated method stub
|
||||
TextView textView = findViewById(R.id.textView1);
|
||||
Date currentTime = Calendar.getInstance().getTime();
|
||||
textView.setText(new Double(Math.random()).toString());
|
||||
handlerCoil.postDelayed(this, 2000);
|
||||
Intent serviceIntent = new Intent(getApplicationContext(), MyIntentService.class);
|
||||
serviceIntent.setAction("read.input.register");
|
||||
serviceIntent.putExtra("extra.ip.address", state.getIpAddress());
|
||||
serviceIntent.putExtra("extra.ip.port", state.getPort());
|
||||
serviceIntent.putExtra("extra.ref", GlobalState.InputConfig.INPUT_REGISTER.getStartReference());
|
||||
serviceIntent.putExtra("extra.count", GlobalState.InputConfig.INPUT_REGISTER.getCount());
|
||||
serviceIntent.putExtra("extra.intent.name", "readOnlyInputRegister");
|
||||
getApplicationContext().startService(serviceIntent);
|
||||
|
||||
handlerInputRegister.postDelayed(this, 1000);
|
||||
}
|
||||
};
|
||||
|
||||
@ -100,7 +114,7 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
TextView textView4 = findViewById(R.id.textView4);
|
||||
textView4.setText(new Boolean(booleanArray[3]).toString());
|
||||
|
||||
/* TextView textView5 = findViewById(R.id.textView5);
|
||||
TextView textView5 = findViewById(R.id.textView5);
|
||||
textView5.setText(new Boolean(booleanArray[4]).toString());
|
||||
|
||||
TextView textView6 = findViewById(R.id.textView6);
|
||||
@ -110,7 +124,7 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
textView7.setText(new Boolean(booleanArray[6]).toString());
|
||||
|
||||
TextView textView8 = findViewById(R.id.textView8);
|
||||
textView8.setText(new Boolean(booleanArray[7]).toString()); */
|
||||
textView8.setText(new Boolean(booleanArray[7]).toString());
|
||||
}
|
||||
};
|
||||
|
||||
@ -119,17 +133,55 @@ public class DisplayMessageActivity extends AppCompatActivity {
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent.getAction();
|
||||
Bundle bundle = intent.getExtras();
|
||||
ArrayList<Integer> integers = bundle.getIntegerArrayList("irValues");
|
||||
ArrayList<Integer> integerArrayList = bundle.getIntegerArrayList("irValues");
|
||||
|
||||
TextView textView9 = findViewById(R.id.textView9);
|
||||
textView9.setText(integers.get(0).toString());
|
||||
textView9.setText(integerArrayList.get(0).toString());
|
||||
}
|
||||
};
|
||||
|
||||
private BroadcastReceiver discreteInputMessageReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent.getAction();
|
||||
Bundle bundle = intent.getExtras();
|
||||
boolean[] booleanArray = bundle.getBooleanArray("discreteInputValues");
|
||||
|
||||
TextView textView10 = findViewById(R.id.textView10);
|
||||
textView10.setText(new Boolean(booleanArray[0]).toString());
|
||||
|
||||
TextView textView11 = findViewById(R.id.textView11);
|
||||
textView11.setText(new Boolean(booleanArray[1]).toString());
|
||||
|
||||
TextView textView12 = findViewById(R.id.textView12);
|
||||
textView12.setText(new Boolean(booleanArray[2]).toString());
|
||||
|
||||
TextView textView13 = findViewById(R.id.textView13);
|
||||
textView13.setText(new Boolean(booleanArray[3]).toString());
|
||||
|
||||
TextView textView14 = findViewById(R.id.textView14);
|
||||
textView14.setText(new Boolean(booleanArray[4]).toString());
|
||||
|
||||
TextView textView15 = findViewById(R.id.textView15);
|
||||
textView15.setText(new Boolean(booleanArray[5]).toString());
|
||||
|
||||
TextView textView16 = findViewById(R.id.textView16);
|
||||
textView16.setText(new Boolean(booleanArray[6]).toString());
|
||||
|
||||
TextView textView17 = findViewById(R.id.textView17);
|
||||
textView17.setText(new Boolean(booleanArray[7]).toString());
|
||||
|
||||
TextView textView18 = findViewById(R.id.textView18);
|
||||
textView18.setText(new Boolean(booleanArray[8]).toString());
|
||||
|
||||
TextView textView19 = findViewById(R.id.textView19);
|
||||
textView19.setText(new Boolean(booleanArray[9]).toString());
|
||||
|
||||
TextView textView20 = findViewById(R.id.textView20);
|
||||
textView20.setText(new Boolean(booleanArray[10]).toString());
|
||||
|
||||
TextView textView21 = findViewById(R.id.textView21);
|
||||
textView21.setText(new Boolean(booleanArray[11]).toString());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -18,9 +18,13 @@ public class GlobalState extends Application {
|
||||
|
||||
//
|
||||
public enum InputConfig {
|
||||
COIL (8192, 80),
|
||||
INPUT_REGISTER (0, 2),
|
||||
DISCRETE_INPUT(0, 12);
|
||||
/* COIL (8192, 8),
|
||||
INPUT_REGISTER (1, 1),
|
||||
DISCRETE_INPUT(1, 12);
|
||||
*/
|
||||
COIL (1, 8),
|
||||
INPUT_REGISTER (1, 8),
|
||||
DISCRETE_INPUT(1, 12);
|
||||
|
||||
private int startReference;
|
||||
private int count;
|
||||
|
@ -19,8 +19,8 @@ public class MainActivity extends AppCompatActivity {
|
||||
public void sendMessage(View view) {
|
||||
EditText editText1 = (EditText) findViewById(R.id.ipAddress);
|
||||
// String ipAddress = editText1.getText().toString();
|
||||
String ipAddress = "10.0.0.60";
|
||||
int port = 502;
|
||||
String ipAddress = "192.168.157.16";
|
||||
int port = 503;
|
||||
|
||||
EditText editText2 = (EditText) findViewById(R.id.port);
|
||||
// int port = Integer.parseInt(editText2.getText().toString());
|
||||
@ -28,8 +28,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
GlobalState state = (GlobalState) getApplicationContext();
|
||||
state.setIpAddress(ipAddress);
|
||||
state.setPort(port);
|
||||
// state.setCoilRef(ref);
|
||||
// state.setCoilCount(count);
|
||||
|
||||
Intent coilServiceIntent = new Intent(this, MyIntentService.class);
|
||||
coilServiceIntent.setAction("read.coil");
|
||||
@ -40,7 +38,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
coilServiceIntent.putExtra("extra.intent.name", "readOnlyCoil");
|
||||
this.startService(coilServiceIntent);
|
||||
|
||||
/* Intent discretInputserviceIntent = new Intent(this, MyIntentService.class);
|
||||
Intent discretInputserviceIntent = new Intent(this, MyIntentService.class);
|
||||
discretInputserviceIntent.setAction("read.discrete.input");
|
||||
discretInputserviceIntent.putExtra("extra.ip.address", ipAddress);
|
||||
discretInputserviceIntent.putExtra("extra.ip.port", port);
|
||||
@ -56,7 +54,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
inputRegisterServiceIntent.putExtra("extra.ref", GlobalState.InputConfig.INPUT_REGISTER.getStartReference());
|
||||
inputRegisterServiceIntent.putExtra("extra.count", GlobalState.InputConfig.INPUT_REGISTER.getCount());
|
||||
inputRegisterServiceIntent.putExtra("extra.intent.name", "readOnlyInputRegister");
|
||||
this.startService(inputRegisterServiceIntent); */
|
||||
this.startService(inputRegisterServiceIntent);
|
||||
|
||||
Intent nextIntent = new Intent(this, DisplayMessageActivity.class);
|
||||
this.startActivity(nextIntent);
|
||||
|
@ -34,17 +34,14 @@ public class MyIntentService extends IntentService {
|
||||
private static final String EXTRA_COUNT = "extra.count";
|
||||
private static final String EXTRA_INTENT_NAME = "extra.intent.name";
|
||||
|
||||
// private static final String EXTRA_PARAM2 = "com.example.user.myapp.extra.PARAM2";
|
||||
|
||||
public MyIntentService() {
|
||||
super("MyIntentService");
|
||||
}
|
||||
|
||||
private void sendBooleanListToActivity(List<Boolean> booleanList, String intentName) {
|
||||
private void sendBooleanListToActivity(List<Boolean> booleanList, String intentName, String bundleName) {
|
||||
Intent intent = new Intent(intentName);
|
||||
Bundle bundle = new Bundle();
|
||||
|
||||
bundle.putBooleanArray("coilValues", toPrimitiveArray(booleanList));
|
||||
bundle.putBooleanArray(bundleName, toPrimitiveArray(booleanList));
|
||||
intent.putExtras(bundle);
|
||||
sendLocationBroadcast(intent);
|
||||
}
|
||||
@ -70,10 +67,10 @@ public class MyIntentService extends IntentService {
|
||||
BitVector bv = master.readInputDiscretes(ref, count);
|
||||
List<Boolean> listBooleanBit = new ArrayList<>();
|
||||
for (int i = 0; i < count; i++) {
|
||||
System.out.println(i+" discret input "+bv.getBit(i));
|
||||
listBooleanBit.add(bv.getBit(i));
|
||||
System.out.println("input discrete values : "+i+" - "+bv.getBit(i));
|
||||
}
|
||||
sendBooleanListToActivity(listBooleanBit, intentReceiveName);
|
||||
sendBooleanListToActivity(listBooleanBit, intentReceiveName, "discreteInputValues");
|
||||
master.disconnect();
|
||||
} catch (Exception e) {
|
||||
System.out.println("Exception in reading discrete input " + e);
|
||||
@ -88,10 +85,10 @@ public class MyIntentService extends IntentService {
|
||||
BitVector bv = master.readCoils(ref,count);
|
||||
List<Boolean> listBooleanBit = new ArrayList<>();
|
||||
for (int i = 0; i < count; i++) {
|
||||
System.out.println("coil values : "+i+" - "+bv.getBit(i));
|
||||
System.out.println(i+" coil "+bv.getBit(i));
|
||||
listBooleanBit.add(bv.getBit(i));
|
||||
}
|
||||
sendBooleanListToActivity(listBooleanBit, intentReceiveName);
|
||||
sendBooleanListToActivity(listBooleanBit, intentReceiveName, "coilValues");
|
||||
master.disconnect();
|
||||
} catch (Exception e) {
|
||||
System.out.println("Exception in reading coil " + e);
|
||||
@ -106,8 +103,8 @@ public class MyIntentService extends IntentService {
|
||||
InputRegister [] inputRegisters = master.readInputRegisters(ref, count);
|
||||
ArrayList<Integer> listIntegerInputRegister = new ArrayList<>();
|
||||
for (InputRegister ir : inputRegisters) {
|
||||
System.out.println("ir values : "+Math.random()+" - "+ir.getValue());
|
||||
listIntegerInputRegister.add(ir.getValue());
|
||||
System.out.println(ir.getValue()+" input register "+Math.random());
|
||||
}
|
||||
sendIntegerListToActivity (listIntegerInputRegister, intentReceiveName);
|
||||
master.disconnect();
|
||||
@ -129,10 +126,13 @@ public class MyIntentService extends IntentService {
|
||||
switch(action) {
|
||||
case ACTION_READ_DISCRETE_INPUT:
|
||||
readDiscreteInputAction (ipAddress, port, ref, count, intentName);
|
||||
break;
|
||||
case ACTION_READ_COIL :
|
||||
readCoilAction(ipAddress, port, ref, count, intentName);
|
||||
break;
|
||||
case ACTION_READ_INPUT_REGISTER :
|
||||
readInputRegisterAction (ipAddress, port,ref, count, intentName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,18 +6,6 @@
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".DisplayMessageActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView9"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView8" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView1"
|
||||
android:layout_width="wrap_content"
|
||||
@ -98,4 +86,153 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView7" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView9"
|
||||
android:layout_width="68dp"
|
||||
android:layout_height="22dp"
|
||||
android:layout_marginStart="36dp"
|
||||
android:layout_marginTop="324dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView10"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.477" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView11"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toTopOf="@+id/textView12"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView12"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="1dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.741" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView13"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="52dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView12" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView14"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView13" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView15"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="18dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginEnd="72dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toTopOf="@+id/textView16"
|
||||
app:layout_constraintEnd_toStartOf="@+id/textView18"
|
||||
app:layout_constraintHorizontal_bias="0.705"
|
||||
app:layout_constraintStart_toEndOf="@+id/textView11" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView16"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="72dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/textView19"
|
||||
app:layout_constraintHorizontal_bias="0.652"
|
||||
app:layout_constraintStart_toEndOf="@+id/textView12"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.753" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView17"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="68dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintStart_toEndOf="@+id/textView13"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView16" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView18"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="336dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toTopOf="@+id/textView19"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="1.0"
|
||||
app:layout_constraintVertical_chainStyle="packed" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView19"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toTopOf="@+id/textView20"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView18" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView20"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toTopOf="@+id/textView21"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView19" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView21"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="36dp"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView20" />
|
||||
</android.support.constraint.ConstraintLayout>
|
Loading…
Reference in New Issue
Block a user